{"version":3,"sources":["../lib/internal-term.ts","../lib/alias.ts","../lib/tput.ts","../lib/colors.ts","../lib/keys.ts","../lib/gpmclient.ts","../lib/program.ts","../lib/events.ts","../lib/unicode.ts","../lib/widgets/box.ts","../lib/widgets/element.ts","../lib/helpers.ts","../lib/widgets/scrollablebox.ts","../lib/widgets/scrollabletext.ts","../lib/widgets/log.ts","../lib/widgets/screen.ts","../lib/widgets/node.ts","../lib/image-processor.ts","../lib/blessed.ts","../lib/widget.ts","../lib/widgets/text.ts","../lib/widgets/line.ts","../lib/widgets/bigtext.ts","../lib/widgets/list.ts","../lib/widgets/form.ts","../lib/widgets/input.ts","../lib/widgets/textarea.ts","../lib/widgets/textbox.ts","../lib/widgets/button.ts","../lib/widgets/progressbar.ts","../lib/widgets/filemanager.ts","../lib/widgets/checkbox.ts","../lib/widgets/radioset.ts","../lib/widgets/radiobutton.ts","../lib/widgets/prompt.ts","../lib/widgets/question.ts","../lib/widgets/message.ts","../lib/widgets/loading.ts","../lib/widgets/listbar.ts","../lib/widgets/table.ts","../lib/widgets/listtable.ts","../lib/widgets/terminal.ts","../lib/widgets/image.ts","../lib/widgets/ansiimage.ts","../lib/widgets/overlayimage.ts","../lib/widgets/video.ts","../lib/widgets/layout.ts"],"names":["path","fs","flag","list","file","j","alias","term","out","asort","cp","i","r","g","b","match","s","stat","EventEmitter","listener","merge","program","util","write","StringDecoder","terminal","key","text","button","slice","NodeEventEmitter","nextTick","Box","line","assert","fs4","screen","data","y","perc","ScrollableBox","ScrollableText","util2","el","spawn","callback","err","input","Screen","message","fs8","processImage","__dirname","path3","fs6","ch","currentLine","Textarea","Input","List","path4","fs7","Button","Textbox","Text","lpos","total","Terminal","cols","rows","chars","cp4","fs9","cp6","box","log","textbox","textarea"],"mappings":"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AAA,MACA,UAAA;AAAA,MACA,aAAA;AAAA,MACA,cAAA;AAAA,MACA,WAAA;AAAA,MACA,aAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA;AAAA,MACA,WAAA;AAAA,MACA,WAAA;AAAA,MACA,WAAA;AAAA,MACA,WAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA;AAAA,MACA,cAAA;AAAA,MACA,WAAA;AAAA,MACA,WAAA;AAAA,MACA,cAAA;AAAA,MACA,eAAA;AAAA,MACA,YAAA;AAAA,MACA,WAAA;AAAA,MACA,cAAA;AAAA,MACA,YAAA;AAAA,MACA,YAAA;AAAA,MACA,WAAA;AAAA,MACA,cAAA;AAAA,MACA,WAAA;AAAA,MACA,eAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;A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","file":"blessed.mjs","sourcesContent":["export default {\n  xterm:\n    'GgEcACYADwCdAWwFeHRlcm18WDExIHRlcm1pbmFsIGVtdWxhdG9yAAABAAABAAAAAQAAAAABAQAAAAAAAAABAAABAAABAAAAAAAAAAABUAAIABgA//////////////////////////8IAEAAAAAEAAYACAAZAB4AJgAqAC4A//85AEoATABQAFcA//9ZAGYA//9qAG4AeAB8AP////+AAIQAiQCOAP////+XAJwA//+hAKYAqwCwALkAvQDEAP//zQDSANgA3gD////////wAP///////wIB//8GAf///////wgB//8NAf//////////EQEVARsBHwEjAScBLQEzATkBPwFFAUkB//9OAf//UgFXAVwBYAFnAf//bgFyAXoB/////////////////////////////4IBiwH/////lAGdAaYBrwG4AcEBygHTAdwB5QH////////uAfIB9wH///wB/wH/////EQIUAh8CIgIkAicCeQL//3wC////////////////fgL//////////4IC//+3Av////+7AsEC/////////////////////////////8cCywL//////////////////////////////////////////////////////////////////88C/////9YC///////////dAuQC6wL/////8gL///kC////////AAP/////////////BwMNAxMDGgMhAygDLwM3Az8DRwNPA1cDXwNnA28DdgN9A4QDiwOTA5sDowOrA7MDuwPDA8sD0gPZA+AD5wPvA/cD/wMHBA8EFwQfBCcELgQ1BDwEQwRLBFMEWwRjBGsEcwR7BIMEigSRBJgE/////////////////////////////////////////////////////////////50EqAStBLUEuQT//////////8IECAX///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9OBf///////1IFXAX/////////////////////////////////////////////////////////////////////////////////////////////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',\n  'xterm-256color':\n    'GgElACYADwCdAakFeHRlcm0tMjU2Y29sb3J8eHRlcm0gd2l0aCAyNTYgY29sb3JzAAABAAABAAAAAQAAAAABAQAAAAAAAAABAAABAAEBAAAAAAAAAAABAFAACAAYAP//////////////////////////AAH/fwAABAAGAAgAGQAeACYAKgAuAP//OQBKAEwAUABXAP//WQBmAP//agBuAHgAfAD/////gACEAIkAjgD/////lwCcAP//oQCmAKsAsAC5AL0AxAD//80A0gDYAN4A////////8AD///////8CAf//BgH///////8IAf//DQH//////////xEBFQEbAR8BIwEnAS0BMwE5AT8BRQFJAf//TgH//1IBVwFcAWABZwH//24BcgF6Af////////////////////////////+CAYsB/////5QBnQGmAa8BuAHBAcoB0wHcAeUB////////7gHyAfcB///8Af8B/////xECFAIfAiICJAInAnkC//98Av///////////////34C//////////+CAv//twL/////uwLBAv/////////////////////////////HAssC///////////////////////////////////////////////////////////////////PAv/////WAv//////////3QLkAusC//////IC///5Av///////wAD/////////////wcDDQMTAxoDIQMoAy8DNwM/A0cDTwNXA18DZwNvA3YDfQOEA4sDkwObA6MDqwOzA7sDwwPLA9ID2QPgA+cD7wP3A/8DBwQPBBcEHwQnBC4ENQQ8BEMESwRTBFsEYwRrBHMEewSDBIoEkQSYBP////////////////////////////////////////////////////////////+dBKgErQS1BLkE///CBP//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////IAX///////8kBWMF////////////////////////////////////////////////////////////////////////////////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',\n  'windows-ansi':\n    'GgEoACYAEAB9AUQCYW5zaXxhbnNpL3BjLXRlcm0gY29tcGF0aWJsZSB3aXRoIGNvbG9yAAABAAAAAAAAAAAAAAABAQAAAAAAAAABAAAAAAAAAAAAAAAAAAABUAAIABgA//////////////////////////8IAEAAAwAAAAQABgD//wgADQAUABgAHAD//ycAOAA8AP//QAD/////RAD//0gA//9MAFAA/////1QAWgBfAP//////////ZAD//2kAbgBzAHgAgQCHAP///////48AkwD/////////////////////lwD//5sA/////////////50A/////////////////////////////////////6EApQD//6kA////////rQD///////+xAP///////////////////////////////////////7UA//+6AMMAzADVAN4A5wDwAPkAAgELAf//////////FAEZAR4B/////////////zIB//89Af//PwGVAf//mAH/////////////////////////////nAH//9sB////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////3wH/////////////////////////////////////////////////////////////5AHvAfQBBwILAv//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////FAIeAv///////ygCLAIwAjQC/////////////////////////////zgCPgIbW1oABwANABtbMmcAG1tIG1tKABtbSwAbW0oAG1slaSVwMSVkRwAbWyVpJXAxJWQ7JXAyJWRIABtbQgAbW0gAG1tEABtbQwAbW0EAG1tQABtbTQAbWzExbQAbWzVtABtbMW0AG1s4bQAbWzdtABtbN20AG1s0bQAbWyVwMSVkWAAbWzEwbQAbWzA7MTBtABtbbQAbW20AG1tMAAgAG1tCABtbSAAbW0wAG1tEABtbQwAbW0EADRtbUwAbWyVwMSVkUAAbWyVwMSVkTQAbWyVwMSVkQgAbWyVwMSVkQAAbWyVwMSVkUwAbWyVwMSVkTAAbWyVwMSVkRAAbWyVwMSVkQwAbWyVwMSVkVAAbWyVwMSVkQQAbWzRpABtbNWkAJXAxJWMbWyVwMiV7MX0lLSVkYgAbWyVpJXAxJWRkAAoAG1swOzEwJT8lcDEldDs3JTslPyVwMiV0OzQlOyU/JXAzJXQ7NyU7JT8lcDQldDs1JTslPyVwNiV0OzElOyU/JXA3JXQ7OCU7JT8lcDkldDsxMSU7bQAbSAAbW0kAKxAsES0YLhkw22AEYbGm+C3xaLBq2Wu/bNptwG7Fb35wxHHEcsRzX3TDdbR2wXfCeLN583rye+N82H2cfv4AG1taABtbMUsAG1slaSVkOyVkUgAbWzZuABtbPyVbOzAxMjM0NTY3ODldYwAbW2MAG1szOTs0OW0AG1szJXAxJWRtABtbNCVwMSVkbQAbKEIAGylCABsqQgAbK0IAG1sxMW0AG1sxMG0AAQAAAAAAAQADAAEAAABBWAA=',\n  linux:\n    'GgEUAB0AEAB9AVQDbGludXh8bGludXggY29uc29sZQAAAQAAAQEAAAAAAAAAAQEAAAAAAAEAAAAAAAABAQD//wgA/////////////////////////////wgAQAASAP//AAACAAQAFQAaACEAJQApAP//NABFAEcASwBXAP//WQBlAP//aQBtAHkAfQD/////gQCHAIwA/////5EAlgD/////mwCgAKUAqgCzALkA/////8EAxgDMANIA////////////////5ADoAP//7AD////////uAP//8wD///////////cA/AACAQcBDAERARYBHAEiASgBLgEzAf//OAH//zwBQQFGAf///////0oB////////////////////////////////////////TgH//1EBWgFjAWwB//91AX4BhwH//5AB//////////////////+ZAf///////58BogGtAbABsgG1ARYC//8ZAv///////////////xsC//////////8fAv//YAL/////ZAJqAv////////////////////////////9wAv//////////////////////////////////////////////////dQL//////////////////////////////////////////////////////////////////////////////////3cCfQKDAokCjwKVApsCoQKnAq0C//////////////////////////////////////////////////////////////////////////////////////////////////////////////////+zAv////////////////////////////////////////////////////////////+4AsMCyALOAtIC2wLfAv//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////MAP///////80Az4D////////////////////////////////////////////////SANOAwcADQAbWyVpJXAxJWQ7JXAyJWRyABtbM2cAG1tIG1tKABtbSwAbW0oAG1slaSVwMSVkRwAbWyVpJXAxJWQ7JXAyJWRIAAoAG1tIABtbPzI1bBtbPzFjAAgAG1s/MjVoG1s/MGMAG1tDABtbQQAbWz8yNWgbWz84YwAbW1AAG1tNABtbMTFtABtbNW0AG1sxbQAbWzJtABtbNGgAG1s3bQAbWzdtABtbNG0AG1slcDElZFgAG1sxMG0AG1swOzEwbQAbWzRsABtbMjdtABtbMjRtABtbPzVoG1s/NWwkPDIwMC8+ABtbQAAbW0wAfwAbWzN+ABtbQgAbW1tBABtbMjF+ABtbW0IAG1tbQwAbW1tEABtbW0UAG1sxN34AG1sxOH4AG1sxOX4AG1syMH4AG1sxfgAbWzJ+ABtbRAAbWzZ+ABtbNX4AG1tDABtbQQANCgAbWyVwMSVkUAAbWyVwMSVkTQAbWyVwMSVkQgAbWyVwMSVkQAAbWyVwMSVkTAAbWyVwMSVkRAAbWyVwMSVkQwAbWyVwMSVkQQAbYxtdUgAbOAAbWyVpJXAxJWRkABs3AAoAG00AG1swOzEwJT8lcDEldDs3JTslPyVwMiV0OzQlOyU/JXAzJXQ7NyU7JT8lcDQldDs1JTslPyVwNSV0OzIlOyU/JXA2JXQ7MSU7JT8lcDcldDs4JTslPyVwOSV0OzExJTttABtIAAkAG1tHACsQLBEtGC4ZMNtgBGGxZvhn8Wiwac5q2Wu/bNptwG7Fb35wxHHEcsRzX3TDdbR2wXfCeLN583rye+N82H2cfv4AG1taABtbPzdoABtbPzdsABtbNH4AGgAbWzIzfgAbWzI0fgAbWzI1fgAbWzI2fgAbWzI4fgAbWzI5fgAbWzMxfgAbWzMyfgAbWzMzfgAbWzM0fgAbWzFLABtbJWklZDslZFIAG1s2bgAbWz82YwAbW2MAG1szOTs0OW0AG11SABtdUCVwMSV4JXAyJXsyNTV9JSolezEwMDB9JS8lMDJ4JXAzJXsyNTV9JSolezEwMDB9JS8lMDJ4JXA0JXsyNTV9JSolezEwMDB9JS8lMDJ4ABtbTQAbWzMlcDElZG0AG1s0JXAxJWRtABtbMTFtABtbMTBtAAMAAQAGABAAIgABAAAAAQD///////////////8AAAMABgAJAAwADwASABYAGgAeAEFYAEcwAFhUAFU4AEUwAFMwAGthMgBrYjEAa2IzAGtjMgA=',\n} as const;\n","/**\n * alias.js - terminfo/cap aliases for blessed.\n * https://github.com/chjj/blessed\n * Taken from terminfo(5) man page.\n */\n\n/* jshint maxlen: 300 */\n// jscs:disable maximumLineLength\n// jscs:disable\n\nconst alias = {} as any;\n\n// These are the boolean capabilities:\nalias.bools = {\n  //         Variable                                      Cap-                               TCap                                  Description\n  //         Booleans                                      name                               Code\n  auto_left_margin: ['bw', 'bw'], //                                cub1 wraps from col‐ umn 0 to last column\n  auto_right_margin: ['am', 'am'], //                                terminal has auto‐ matic margins\n  back_color_erase: ['bce', 'ut'], //                                screen erased with background color\n  can_change: ['ccc', 'cc'], //                                terminal can re- define existing col‐ ors\n  ceol_standout_glitch: ['xhp', 'xs'], //                                standout not erased by overwriting (hp)\n  col_addr_glitch: ['xhpa', 'YA'], //                                only positive motion for hpa/mhpa caps\n  cpi_changes_res: ['cpix', 'YF'], //                                changing character pitch changes reso‐ lution\n  cr_cancels_micro_mode: ['crxm', 'YB'], //                                using cr turns off micro mode\n  dest_tabs_magic_smso: ['xt', 'xt'], //                                tabs destructive, magic so char (t1061)\n  eat_newline_glitch: ['xenl', 'xn'], //                                newline ignored after 80 cols (con‐ cept)\n  erase_overstrike: ['eo', 'eo'], //                                can erase over‐ strikes with a blank\n  generic_type: ['gn', 'gn'], //                                generic line type\n  hard_copy: ['hc', 'hc'], //                                hardcopy terminal\n  hard_cursor: ['chts', 'HC'], //                                cursor is hard to see\n  has_meta_key: ['km', 'km'], //                                Has a meta key (i.e., sets 8th-bit)\n  has_print_wheel: ['daisy', 'YC'], //                                printer needs opera‐ tor to change char‐ acter set\n  has_status_line: ['hs', 'hs'], //                                has extra status line\n  hue_lightness_saturation: ['hls', 'hl'], //                                terminal uses only HLS color notation (Tektronix)\n  insert_null_glitch: ['in', 'in'], //                                insert mode distin‐ guishes nulls\n  lpi_changes_res: ['lpix', 'YG'], //                                changing line pitch changes resolution\n  memory_above: ['da', 'da'], //                                display may be retained above the screen\n  memory_below: ['db', 'db'], //                                display may be retained below the screen\n  move_insert_mode: ['mir', 'mi'], //                                safe to move while in insert mode\n  move_standout_mode: ['msgr', 'ms'], //                                safe to move while in standout mode\n  needs_xon_xoff: ['nxon', 'nx'], //                                padding will not work, xon/xoff required\n  no_esc_ctlc: ['xsb', 'xb'], //                                beehive (f1=escape, f2=ctrl C)\n  no_pad_char: ['npc', 'NP'], //                                pad character does not exist\n  non_dest_scroll_region: ['ndscr', 'ND'], //                                scrolling region is non-destructive\n  non_rev_rmcup: ['nrrmc', 'NR'], //                                smcup does not reverse rmcup\n  over_strike: ['os', 'os'], //                                terminal can over‐ strike\n  prtr_silent: ['mc5i', '5i'], //                                printer will not echo on screen\n  row_addr_glitch: ['xvpa', 'YD'], //                                only positive motion for vpa/mvpa caps\n  semi_auto_right_margin: ['sam', 'YE'], //                                printing in last column causes cr\n  status_line_esc_ok: ['eslok', 'es'], //                                escape can be used on the status line\n  tilde_glitch: ['hz', 'hz'], //                                cannot print ~'s (hazeltine)\n  transparent_underline: ['ul', 'ul'], //                                underline character overstrikes\n  xon_xoff: ['xon', 'xo'], //                                terminal uses xon/xoff handshaking\n};\n\n// These are the numeric capabilities:\nalias.numbers = {\n  //         Variable                                      Cap-                               TCap                                  Description\n  //          Numeric                                      name                               Code\n  columns: ['cols', 'co'], //                                number of columns in a line\n  init_tabs: ['it', 'it'], //                                tabs initially every # spaces\n  label_height: ['lh', 'lh'], //                                rows in each label\n  label_width: ['lw', 'lw'], //                                columns in each label\n  lines: ['lines', 'li'], //                                number of lines on screen or page\n  lines_of_memory: ['lm', 'lm'], //                                lines of memory if > line. 0 means varies\n  magic_cookie_glitch: ['xmc', 'sg'], //                                number of blank characters left by smso or rmso\n  max_attributes: ['ma', 'ma'], //                                maximum combined attributes terminal can handle\n  max_colors: ['colors', 'Co'], //                                maximum number of colors on screen\n  max_pairs: ['pairs', 'pa'], //                                maximum number of color-pairs on the screen\n  maximum_windows: ['wnum', 'MW'], //                                maximum number of defineable windows\n  no_color_video: ['ncv', 'NC'], //                                video attributes that cannot be used with colors\n  num_labels: ['nlab', 'Nl'], //                                number of labels on screen\n  padding_baud_rate: ['pb', 'pb'], //                                lowest baud rate where padding needed\n  virtual_terminal: ['vt', 'vt'], //                                virtual terminal number (CB/unix)\n  width_status_line: ['wsl', 'ws'], //                                number of columns in status line\n\n  // The  following  numeric  capabilities  are present in the SVr4.0 term structure, but are not yet documented in the man page.  They came in with\n  // SVr4's printer support.\n\n  //         Variable                                      Cap-                               TCap                                  Description\n  //          Numeric                                      name                               Code\n  bit_image_entwining: ['bitwin', 'Yo'], //                                number of passes for each bit-image row\n  bit_image_type: ['bitype', 'Yp'], //                                type of bit-image device\n  buffer_capacity: ['bufsz', 'Ya'], //                                numbers of bytes buffered before printing\n  buttons: ['btns', 'BT'], //                                number of buttons on mouse\n  dot_horz_spacing: ['spinh', 'Yc'], //                                spacing of dots hor‐ izontally in dots per inch\n  dot_vert_spacing: ['spinv', 'Yb'], //                                spacing of pins ver‐ tically in pins per inch\n  max_micro_address: ['maddr', 'Yd'], //                                maximum value in micro_..._address\n  max_micro_jump: ['mjump', 'Ye'], //                                maximum value in parm_..._micro\n  micro_col_size: ['mcs', 'Yf'], //                                character step size when in micro mode\n  micro_line_size: ['mls', 'Yg'], //                                line step size when in micro mode\n  number_of_pins: ['npins', 'Yh'], //                                numbers of pins in print-head\n  output_res_char: ['orc', 'Yi'], //                                horizontal resolu‐ tion in units per line\n  output_res_horz_inch: ['orhi', 'Yk'], //                                horizontal resolu‐ tion in units per inch\n  output_res_line: ['orl', 'Yj'], //                                vertical resolution in units per line\n  output_res_vert_inch: ['orvi', 'Yl'], //                                vertical resolution in units per inch\n  print_rate: ['cps', 'Ym'], //                                print rate in char‐ acters per second\n  wide_char_size: ['widcs', 'Yn'], //                                character step size when in double wide mode\n};\n\n// These are the string capabilities:\nalias.strings = {\n  //         Variable                                    Cap-                             TCap                                   Description\n  //          String                                     name                             Code\n  acs_chars: ['acsc', 'ac'], //                              graphics charset pairs, based on vt100\n  back_tab: ['cbt', 'bt'], //                              back tab (P)\n  bell: ['bel', 'bl'], //                              audible signal (bell) (P)\n  carriage_return: ['cr', 'cr'], //                              carriage return (P*) (P*)\n  change_char_pitch: ['cpi', 'ZA'], //                              Change number of characters per inch to #1\n  change_line_pitch: ['lpi', 'ZB'], //                              Change number of lines per inch to #1\n  change_res_horz: ['chr', 'ZC'], //                              Change horizontal resolution to #1\n  change_res_vert: ['cvr', 'ZD'], //                              Change vertical res‐ olution to #1\n  change_scroll_region: ['csr', 'cs'], //                              change region to line #1 to line #2 (P)\n  char_padding: ['rmp', 'rP'], //                              like ip but when in insert mode\n  clear_all_tabs: ['tbc', 'ct'], //                              clear all tab stops (P)\n  clear_margins: ['mgc', 'MC'], //                              clear right and left soft margins\n  clear_screen: ['clear', 'cl'], //                              clear screen and home cursor (P*)\n  clr_bol: ['el1', 'cb'], //                              Clear to beginning of line\n  clr_eol: ['el', 'ce'], //                              clear to end of line (P)\n  clr_eos: ['ed', 'cd'], //                              clear to end of screen (P*)\n  column_address: ['hpa', 'ch'], //                              horizontal position #1, absolute (P)\n  command_character: ['cmdch', 'CC'], //                              terminal settable cmd character in prototype !?\n  create_window: ['cwin', 'CW'], //                              define a window #1 from #2,#3 to #4,#5\n  cursor_address: ['cup', 'cm'], //                              move to row #1 col‐ umns #2\n  cursor_down: ['cud1', 'do'], //                              down one line\n  cursor_home: ['home', 'ho'], //                              home cursor (if no cup)\n  cursor_invisible: ['civis', 'vi'], //                              make cursor invisi‐ ble\n  cursor_left: ['cub1', 'le'], //                              move left one space\n  cursor_mem_address: ['mrcup', 'CM'], //                              memory relative cur‐ sor addressing, move to row #1 columns #2\n  cursor_normal: ['cnorm', 've'], //                              make cursor appear normal (undo civis/cvvis)\n  cursor_right: ['cuf1', 'nd'], //                              non-destructive space (move right one space)\n  cursor_to_ll: ['ll', 'll'], //                              last line, first column (if no cup)\n  cursor_up: ['cuu1', 'up'], //                              up one line\n  cursor_visible: ['cvvis', 'vs'], //                              make cursor very visible\n  define_char: ['defc', 'ZE'], //                              Define a character #1, #2 dots wide, descender #3\n  delete_character: ['dch1', 'dc'], //                              delete character (P*)\n  delete_line: ['dl1', 'dl'], //                              delete line (P*)\n  dial_phone: ['dial', 'DI'], //                              dial number #1\n  dis_status_line: ['dsl', 'ds'], //                              disable status line\n  display_clock: ['dclk', 'DK'], //                              display clock\n  down_half_line: ['hd', 'hd'], //                              half a line down\n  ena_acs: ['enacs', 'eA'], //                              enable alternate char set\n  enter_alt_charset_mode: ['smacs', 'as'], //                              start alternate character set (P)\n  enter_am_mode: ['smam', 'SA'], //                              turn on automatic margins\n  enter_blink_mode: ['blink', 'mb'], //                              turn on blinking\n  enter_bold_mode: ['bold', 'md'], //                              turn on bold (extra bright) mode\n  enter_ca_mode: ['smcup', 'ti'], //                              string to start pro‐ grams using cup\n  enter_delete_mode: ['smdc', 'dm'], //                              enter delete mode\n  enter_dim_mode: ['dim', 'mh'], //                              turn on half-bright mode\n  enter_doublewide_mode: ['swidm', 'ZF'], //                              Enter double-wide mode\n  enter_draft_quality: ['sdrfq', 'ZG'], //                              Enter draft-quality mode\n  enter_insert_mode: ['smir', 'im'], //                              enter insert mode\n  enter_italics_mode: ['sitm', 'ZH'], //                              Enter italic mode\n  enter_leftward_mode: ['slm', 'ZI'], //                              Start leftward car‐ riage motion\n  enter_micro_mode: ['smicm', 'ZJ'], //                              Start micro-motion mode\n  enter_near_letter_quality: ['snlq', 'ZK'], //                              Enter NLQ mode\n  enter_normal_quality: ['snrmq', 'ZL'], //                              Enter normal-quality mode\n  enter_protected_mode: ['prot', 'mp'], //                              turn on protected mode\n  enter_reverse_mode: ['rev', 'mr'], //                              turn on reverse video mode\n  enter_secure_mode: ['invis', 'mk'], //                              turn on blank mode (characters invisi‐ ble)\n  enter_shadow_mode: ['sshm', 'ZM'], //                              Enter shadow-print mode\n  enter_standout_mode: ['smso', 'so'], //                              begin standout mode\n  enter_subscript_mode: ['ssubm', 'ZN'], //                              Enter subscript mode\n  enter_superscript_mode: ['ssupm', 'ZO'], //                              Enter superscript mode\n  enter_underline_mode: ['smul', 'us'], //                              begin underline mode\n  enter_upward_mode: ['sum', 'ZP'], //                              Start upward car‐ riage motion\n  enter_xon_mode: ['smxon', 'SX'], //                              turn on xon/xoff handshaking\n  erase_chars: ['ech', 'ec'], //                              erase #1 characters (P)\n  exit_alt_charset_mode: ['rmacs', 'ae'], //                              end alternate char‐ acter set (P)\n  exit_am_mode: ['rmam', 'RA'], //                              turn off automatic margins\n  exit_attribute_mode: ['sgr0', 'me'], //                              turn off all attributes\n  exit_ca_mode: ['rmcup', 'te'], //                              strings to end pro‐ grams using cup\n  exit_delete_mode: ['rmdc', 'ed'], //                              end delete mode\n  exit_doublewide_mode: ['rwidm', 'ZQ'], //                              End double-wide mode\n  exit_insert_mode: ['rmir', 'ei'], //                              exit insert mode\n  exit_italics_mode: ['ritm', 'ZR'], //                              End italic mode\n  exit_leftward_mode: ['rlm', 'ZS'], //                              End left-motion mode\n\n  exit_micro_mode: ['rmicm', 'ZT'], //                              End micro-motion mode\n  exit_shadow_mode: ['rshm', 'ZU'], //                              End shadow-print mode\n  exit_standout_mode: ['rmso', 'se'], //                              exit standout mode\n  exit_subscript_mode: ['rsubm', 'ZV'], //                              End subscript mode\n  exit_superscript_mode: ['rsupm', 'ZW'], //                              End superscript mode\n  exit_underline_mode: ['rmul', 'ue'], //                              exit underline mode\n  exit_upward_mode: ['rum', 'ZX'], //                              End reverse charac‐ ter motion\n  exit_xon_mode: ['rmxon', 'RX'], //                              turn off xon/xoff handshaking\n  fixed_pause: ['pause', 'PA'], //                              pause for 2-3 sec‐ onds\n  flash_hook: ['hook', 'fh'], //                              flash switch hook\n  flash_screen: ['flash', 'vb'], //                              visible bell (may not move cursor)\n  form_feed: ['ff', 'ff'], //                              hardcopy terminal page eject (P*)\n  from_status_line: ['fsl', 'fs'], //                              return from status line\n  goto_window: ['wingo', 'WG'], //                              go to window #1\n  hangup: ['hup', 'HU'], //                              hang-up phone\n  init_1string: ['is1', 'i1'], //                              initialization string\n  init_2string: ['is2', 'is'], //                              initialization string\n  init_3string: ['is3', 'i3'], //                              initialization string\n  init_file: ['if', 'if'], //                              name of initializa‐ tion file\n  init_prog: ['iprog', 'iP'], //                              path name of program for initialization\n  initialize_color: ['initc', 'Ic'], //                              initialize color #1 to (#2,#3,#4)\n  initialize_pair: ['initp', 'Ip'], //                              Initialize color pair #1 to fg=(#2,#3,#4), bg=(#5,#6,#7)\n  insert_character: ['ich1', 'ic'], //                              insert character (P)\n  insert_line: ['il1', 'al'], //                              insert line (P*)\n  insert_padding: ['ip', 'ip'], //                              insert padding after inserted character\n  key_a1: ['ka1', 'K1'], //                              upper left of keypad\n  key_a3: ['ka3', 'K3'], //                              upper right of key‐ pad\n  key_b2: ['kb2', 'K2'], //                              center of keypad\n  key_backspace: ['kbs', 'kb'], //                              backspace key\n  key_beg: ['kbeg', '@1'], //                              begin key\n  key_btab: ['kcbt', 'kB'], //                              back-tab key\n  key_c1: ['kc1', 'K4'], //                              lower left of keypad\n  key_c3: ['kc3', 'K5'], //                              lower right of key‐ pad\n  key_cancel: ['kcan', '@2'], //                              cancel key\n  key_catab: ['ktbc', 'ka'], //                              clear-all-tabs key\n  key_clear: ['kclr', 'kC'], //                              clear-screen or erase key\n  key_close: ['kclo', '@3'], //                              close key\n  key_command: ['kcmd', '@4'], //                              command key\n  key_copy: ['kcpy', '@5'], //                              copy key\n  key_create: ['kcrt', '@6'], //                              create key\n  key_ctab: ['kctab', 'kt'], //                              clear-tab key\n  key_dc: ['kdch1', 'kD'], //                              delete-character key\n  key_dl: ['kdl1', 'kL'], //                              delete-line key\n  key_down: ['kcud1', 'kd'], //                              down-arrow key\n\n  key_eic: ['krmir', 'kM'], //                              sent by rmir or smir in insert mode\n  key_end: ['kend', '@7'], //                              end key\n  key_enter: ['kent', '@8'], //                              enter/send key\n  key_eol: ['kel', 'kE'], //                              clear-to-end-of-line key\n  key_eos: ['ked', 'kS'], //                              clear-to-end-of- screen key\n  key_exit: ['kext', '@9'], //                              exit key\n  key_f0: ['kf0', 'k0'], //                              F0 function key\n  key_f1: ['kf1', 'k1'], //                              F1 function key\n  key_f10: ['kf10', 'k;'], //                              F10 function key\n  key_f11: ['kf11', 'F1'], //                              F11 function key\n  key_f12: ['kf12', 'F2'], //                              F12 function key\n  key_f13: ['kf13', 'F3'], //                              F13 function key\n  key_f14: ['kf14', 'F4'], //                              F14 function key\n  key_f15: ['kf15', 'F5'], //                              F15 function key\n  key_f16: ['kf16', 'F6'], //                              F16 function key\n  key_f17: ['kf17', 'F7'], //                              F17 function key\n  key_f18: ['kf18', 'F8'], //                              F18 function key\n  key_f19: ['kf19', 'F9'], //                              F19 function key\n  key_f2: ['kf2', 'k2'], //                              F2 function key\n  key_f20: ['kf20', 'FA'], //                              F20 function key\n  key_f21: ['kf21', 'FB'], //                              F21 function key\n  key_f22: ['kf22', 'FC'], //                              F22 function key\n  key_f23: ['kf23', 'FD'], //                              F23 function key\n  key_f24: ['kf24', 'FE'], //                              F24 function key\n  key_f25: ['kf25', 'FF'], //                              F25 function key\n  key_f26: ['kf26', 'FG'], //                              F26 function key\n  key_f27: ['kf27', 'FH'], //                              F27 function key\n  key_f28: ['kf28', 'FI'], //                              F28 function key\n  key_f29: ['kf29', 'FJ'], //                              F29 function key\n  key_f3: ['kf3', 'k3'], //                              F3 function key\n  key_f30: ['kf30', 'FK'], //                              F30 function key\n  key_f31: ['kf31', 'FL'], //                              F31 function key\n  key_f32: ['kf32', 'FM'], //                              F32 function key\n  key_f33: ['kf33', 'FN'], //                              F33 function key\n  key_f34: ['kf34', 'FO'], //                              F34 function key\n  key_f35: ['kf35', 'FP'], //                              F35 function key\n  key_f36: ['kf36', 'FQ'], //                              F36 function key\n  key_f37: ['kf37', 'FR'], //                              F37 function key\n  key_f38: ['kf38', 'FS'], //                              F38 function key\n  key_f39: ['kf39', 'FT'], //                              F39 function key\n  key_f4: ['kf4', 'k4'], //                              F4 function key\n  key_f40: ['kf40', 'FU'], //                              F40 function key\n  key_f41: ['kf41', 'FV'], //                              F41 function key\n  key_f42: ['kf42', 'FW'], //                              F42 function key\n  key_f43: ['kf43', 'FX'], //                              F43 function key\n  key_f44: ['kf44', 'FY'], //                              F44 function key\n  key_f45: ['kf45', 'FZ'], //                              F45 function key\n  key_f46: ['kf46', 'Fa'], //                              F46 function key\n  key_f47: ['kf47', 'Fb'], //                              F47 function key\n  key_f48: ['kf48', 'Fc'], //                              F48 function key\n  key_f49: ['kf49', 'Fd'], //                              F49 function key\n  key_f5: ['kf5', 'k5'], //                              F5 function key\n  key_f50: ['kf50', 'Fe'], //                              F50 function key\n  key_f51: ['kf51', 'Ff'], //                              F51 function key\n  key_f52: ['kf52', 'Fg'], //                              F52 function key\n  key_f53: ['kf53', 'Fh'], //                              F53 function key\n  key_f54: ['kf54', 'Fi'], //                              F54 function key\n  key_f55: ['kf55', 'Fj'], //                              F55 function key\n  key_f56: ['kf56', 'Fk'], //                              F56 function key\n  key_f57: ['kf57', 'Fl'], //                              F57 function key\n  key_f58: ['kf58', 'Fm'], //                              F58 function key\n  key_f59: ['kf59', 'Fn'], //                              F59 function key\n\n  key_f6: ['kf6', 'k6'], //                              F6 function key\n  key_f60: ['kf60', 'Fo'], //                              F60 function key\n  key_f61: ['kf61', 'Fp'], //                              F61 function key\n  key_f62: ['kf62', 'Fq'], //                              F62 function key\n  key_f63: ['kf63', 'Fr'], //                              F63 function key\n  key_f7: ['kf7', 'k7'], //                              F7 function key\n  key_f8: ['kf8', 'k8'], //                              F8 function key\n  key_f9: ['kf9', 'k9'], //                              F9 function key\n  key_find: ['kfnd', '@0'], //                              find key\n  key_help: ['khlp', '%1'], //                              help key\n  key_home: ['khome', 'kh'], //                              home key\n  key_ic: ['kich1', 'kI'], //                              insert-character key\n  key_il: ['kil1', 'kA'], //                              insert-line key\n  key_left: ['kcub1', 'kl'], //                              left-arrow key\n  key_ll: ['kll', 'kH'], //                              lower-left key (home down)\n  key_mark: ['kmrk', '%2'], //                              mark key\n  key_message: ['kmsg', '%3'], //                              message key\n  key_move: ['kmov', '%4'], //                              move key\n  key_next: ['knxt', '%5'], //                              next key\n  key_npage: ['knp', 'kN'], //                              next-page key\n  key_open: ['kopn', '%6'], //                              open key\n  key_options: ['kopt', '%7'], //                              options key\n  key_ppage: ['kpp', 'kP'], //                              previous-page key\n  key_previous: ['kprv', '%8'], //                              previous key\n  key_print: ['kprt', '%9'], //                              print key\n  key_redo: ['krdo', '%0'], //                              redo key\n  key_reference: ['kref', '&1'], //                              reference key\n  key_refresh: ['krfr', '&2'], //                              refresh key\n  key_replace: ['krpl', '&3'], //                              replace key\n  key_restart: ['krst', '&4'], //                              restart key\n  key_resume: ['kres', '&5'], //                              resume key\n  key_right: ['kcuf1', 'kr'], //                              right-arrow key\n  key_save: ['ksav', '&6'], //                              save key\n  key_sbeg: ['kBEG', '&9'], //                              shifted begin key\n  key_scancel: ['kCAN', '&0'], //                              shifted cancel key\n  key_scommand: ['kCMD', '*1'], //                              shifted command key\n  key_scopy: ['kCPY', '*2'], //                              shifted copy key\n  key_screate: ['kCRT', '*3'], //                              shifted create key\n  key_sdc: ['kDC', '*4'], //                              shifted delete-char‐ acter key\n  key_sdl: ['kDL', '*5'], //                              shifted delete-line key\n  key_select: ['kslt', '*6'], //                              select key\n  key_send: ['kEND', '*7'], //                              shifted end key\n  key_seol: ['kEOL', '*8'], //                              shifted clear-to- end-of-line key\n  key_sexit: ['kEXT', '*9'], //                              shifted exit key\n  key_sf: ['kind', 'kF'], //                              scroll-forward key\n  key_sfind: ['kFND', '*0'], //                              shifted find key\n  key_shelp: ['kHLP', '#1'], //                              shifted help key\n  key_shome: ['kHOM', '#2'], //                              shifted home key\n  key_sic: ['kIC', '#3'], //                              shifted insert-char‐ acter key\n  key_sleft: ['kLFT', '#4'], //                              shifted left-arrow key\n  key_smessage: ['kMSG', '%a'], //                              shifted message key\n  key_smove: ['kMOV', '%b'], //                              shifted move key\n  key_snext: ['kNXT', '%c'], //                              shifted next key\n  key_soptions: ['kOPT', '%d'], //                              shifted options key\n  key_sprevious: ['kPRV', '%e'], //                              shifted previous key\n  key_sprint: ['kPRT', '%f'], //                              shifted print key\n  key_sr: ['kri', 'kR'], //                              scroll-backward key\n  key_sredo: ['kRDO', '%g'], //                              shifted redo key\n  key_sreplace: ['kRPL', '%h'], //                              shifted replace key\n\n  key_sright: ['kRIT', '%i'], //                              shifted right-arrow key\n  key_srsume: ['kRES', '%j'], //                              shifted resume key\n  key_ssave: ['kSAV', '!1'], //                              shifted save key\n  key_ssuspend: ['kSPD', '!2'], //                              shifted suspend key\n  key_stab: ['khts', 'kT'], //                              set-tab key\n  key_sundo: ['kUND', '!3'], //                              shifted undo key\n  key_suspend: ['kspd', '&7'], //                              suspend key\n  key_undo: ['kund', '&8'], //                              undo key\n  key_up: ['kcuu1', 'ku'], //                              up-arrow key\n  keypad_local: ['rmkx', 'ke'], //                              leave 'key‐ board_transmit' mode\n  keypad_xmit: ['smkx', 'ks'], //                              enter 'key‐ board_transmit' mode\n  lab_f0: ['lf0', 'l0'], //                              label on function key f0 if not f0\n  lab_f1: ['lf1', 'l1'], //                              label on function key f1 if not f1\n  lab_f10: ['lf10', 'la'], //                              label on function key f10 if not f10\n  lab_f2: ['lf2', 'l2'], //                              label on function key f2 if not f2\n  lab_f3: ['lf3', 'l3'], //                              label on function key f3 if not f3\n  lab_f4: ['lf4', 'l4'], //                              label on function key f4 if not f4\n  lab_f5: ['lf5', 'l5'], //                              label on function key f5 if not f5\n  lab_f6: ['lf6', 'l6'], //                              label on function key f6 if not f6\n  lab_f7: ['lf7', 'l7'], //                              label on function key f7 if not f7\n  lab_f8: ['lf8', 'l8'], //                              label on function key f8 if not f8\n  lab_f9: ['lf9', 'l9'], //                              label on function key f9 if not f9\n  label_format: ['fln', 'Lf'], //                              label format\n  label_off: ['rmln', 'LF'], //                              turn off soft labels\n  label_on: ['smln', 'LO'], //                              turn on soft labels\n  meta_off: ['rmm', 'mo'], //                              turn off meta mode\n  meta_on: ['smm', 'mm'], //                              turn on meta mode (8th-bit on)\n  micro_column_address: ['mhpa', 'ZY'], //                              Like column_address in micro mode\n  micro_down: ['mcud1', 'ZZ'], //                              Like cursor_down in micro mode\n  micro_left: ['mcub1', 'Za'], //                              Like cursor_left in micro mode\n  micro_right: ['mcuf1', 'Zb'], //                              Like cursor_right in micro mode\n  micro_row_address: ['mvpa', 'Zc'], //                              Like row_address #1 in micro mode\n  micro_up: ['mcuu1', 'Zd'], //                              Like cursor_up in micro mode\n  newline: ['nel', 'nw'], //                              newline (behave like cr followed by lf)\n  order_of_pins: ['porder', 'Ze'], //                              Match software bits to print-head pins\n  orig_colors: ['oc', 'oc'], //                              Set all color pairs to the original ones\n  orig_pair: ['op', 'op'], //                              Set default pair to its original value\n  pad_char: ['pad', 'pc'], //                              padding char (instead of null)\n\n  parm_dch: ['dch', 'DC'], //                              delete #1 characters (P*)\n  parm_delete_line: ['dl', 'DL'], //                              delete #1 lines (P*)\n  parm_down_cursor: ['cud', 'DO'], //                              down #1 lines (P*)\n  parm_down_micro: ['mcud', 'Zf'], //                              Like parm_down_cur‐ sor in micro mode\n  parm_ich: ['ich', 'IC'], //                              insert #1 characters (P*)\n  parm_index: ['indn', 'SF'], //                              scroll forward #1 lines (P)\n  parm_insert_line: ['il', 'AL'], //                              insert #1 lines (P*)\n  parm_left_cursor: ['cub', 'LE'], //                              move #1 characters to the left (P)\n  parm_left_micro: ['mcub', 'Zg'], //                              Like parm_left_cur‐ sor in micro mode\n  parm_right_cursor: ['cuf', 'RI'], //                              move #1 characters to the right (P*)\n  parm_right_micro: ['mcuf', 'Zh'], //                              Like parm_right_cur‐ sor in micro mode\n  parm_rindex: ['rin', 'SR'], //                              scroll back #1 lines (P)\n  parm_up_cursor: ['cuu', 'UP'], //                              up #1 lines (P*)\n  parm_up_micro: ['mcuu', 'Zi'], //                              Like parm_up_cursor in micro mode\n  pkey_key: ['pfkey', 'pk'], //                              program function key #1 to type string #2\n  pkey_local: ['pfloc', 'pl'], //                              program function key #1 to execute string #2\n  pkey_xmit: ['pfx', 'px'], //                              program function key #1 to transmit string #2\n  plab_norm: ['pln', 'pn'], //                              program label #1 to show string #2\n  print_screen: ['mc0', 'ps'], //                              print contents of screen\n  prtr_non: ['mc5p', 'pO'], //                              turn on printer for #1 bytes\n  prtr_off: ['mc4', 'pf'], //                              turn off printer\n  prtr_on: ['mc5', 'po'], //                              turn on printer\n  pulse: ['pulse', 'PU'], //                              select pulse dialing\n  quick_dial: ['qdial', 'QD'], //                              dial number #1 with‐ out checking\n  remove_clock: ['rmclk', 'RC'], //                              remove clock\n  repeat_char: ['rep', 'rp'], //                              repeat char #1 #2 times (P*)\n  req_for_input: ['rfi', 'RF'], //                              send next input char (for ptys)\n  reset_1string: ['rs1', 'r1'], //                              reset string\n  reset_2string: ['rs2', 'r2'], //                              reset string\n  reset_3string: ['rs3', 'r3'], //                              reset string\n  reset_file: ['rf', 'rf'], //                              name of reset file\n  restore_cursor: ['rc', 'rc'], //                              restore cursor to position of last save_cursor\n  row_address: ['vpa', 'cv'], //                              vertical position #1 absolute (P)\n  save_cursor: ['sc', 'sc'], //                              save current cursor position (P)\n  scroll_forward: ['ind', 'sf'], //                              scroll text up (P)\n  scroll_reverse: ['ri', 'sr'], //                              scroll text down (P)\n  select_char_set: ['scs', 'Zj'], //                              Select character set, #1\n  set_attributes: ['sgr', 'sa'], //                              define video attributes #1-#9 (PG9)\n  set_background: ['setb', 'Sb'], //                              Set background color #1\n  set_bottom_margin: ['smgb', 'Zk'], //                              Set bottom margin at current line\n  set_bottom_margin_parm: ['smgbp', 'Zl'], //                              Set bottom margin at line #1 or (if smgtp is not given) #2 lines from bottom\n  set_clock: ['sclk', 'SC'], //                              set clock, #1 hrs #2 mins #3 secs\n  set_color_pair: ['scp', 'sp'], //                              Set current color pair to #1\n  set_foreground: ['setf', 'Sf'], //                              Set foreground color #1\n  set_left_margin: ['smgl', 'ML'], //                              set left soft margin at current col‐ umn.  See smgl. (ML is not in BSD termcap).\n  set_left_margin_parm: ['smglp', 'Zm'], //                              Set left (right) margin at column #1\n  set_right_margin: ['smgr', 'MR'], //                              set right soft margin at current column\n  set_right_margin_parm: ['smgrp', 'Zn'], //                              Set right margin at column #1\n  set_tab: ['hts', 'st'], //                              set a tab in every row, current columns\n  set_top_margin: ['smgt', 'Zo'], //                              Set top margin at current line\n  set_top_margin_parm: ['smgtp', 'Zp'], //                              Set top (bottom) margin at row #1\n  set_window: ['wind', 'wi'], //                              current window is lines #1-#2 cols #3-#4\n  start_bit_image: ['sbim', 'Zq'], //                              Start printing bit image graphics\n  start_char_set_def: ['scsd', 'Zr'], //                              Start character set defi‐ nition #1, with #2 charac‐ ters in the set\n  stop_bit_image: ['rbim', 'Zs'], //                              Stop printing bit image graphics\n  stop_char_set_def: ['rcsd', 'Zt'], //                              End definition of charac‐ ter set #1\n  subscript_characters: ['subcs', 'Zu'], //                              List of subscriptable characters\n  superscript_characters: ['supcs', 'Zv'], //                              List of superscriptable characters\n  tab: ['ht', 'ta'], //                              tab to next 8-space hard‐ ware tab stop\n  these_cause_cr: ['docr', 'Zw'], //                              Printing any of these characters causes CR\n  to_status_line: ['tsl', 'ts'], //                              move to status line, col‐ umn #1\n  tone: ['tone', 'TO'], //                              select touch tone dialing\n  underline_char: ['uc', 'uc'], //                              underline char and move past it\n  up_half_line: ['hu', 'hu'], //                              half a line up\n  user0: ['u0', 'u0'], //                              User string #0\n  user1: ['u1', 'u1'], //                              User string #1\n  user2: ['u2', 'u2'], //                              User string #2\n  user3: ['u3', 'u3'], //                              User string #3\n  user4: ['u4', 'u4'], //                              User string #4\n  user5: ['u5', 'u5'], //                              User string #5\n\n  user6: ['u6', 'u6'], //                              User string #6\n  user7: ['u7', 'u7'], //                              User string #7\n  user8: ['u8', 'u8'], //                              User string #8\n  user9: ['u9', 'u9'], //                              User string #9\n  wait_tone: ['wait', 'WA'], //                              wait for dial-tone\n  xoff_character: ['xoffc', 'XF'], //                              XOFF character\n  xon_character: ['xonc', 'XN'], //                              XON character\n  zero_motion: ['zerom', 'Zx'], //                              No motion for subsequent character\n\n  // The following string capabilities are present in the SVr4.0 term structure, but were originally not documented in the man page.\n\n  //         Variable                                      Cap-                                 TCap                                 Description\n  //          String                                       name                                 Code\n  alt_scancode_esc: ['scesa', 'S8'], //                                Alternate escape for scancode emu‐ lation\n  bit_image_carriage_return: ['bicr', 'Yv'], //                                Move to beginning of same row\n  bit_image_newline: ['binel', 'Zz'], //                                Move to next row of the bit image\n  bit_image_repeat: ['birep', 'Xy'], //                                Repeat bit image cell #1 #2 times\n  char_set_names: ['csnm', 'Zy'], //                                Produce #1'th item from list of char‐ acter set names\n  code_set_init: ['csin', 'ci'], //                                Init sequence for multiple codesets\n  color_names: ['colornm', 'Yw'], //                                Give name for color #1\n  define_bit_image_region: ['defbi', 'Yx'], //                                Define rectan‐ gualar bit image region\n  device_type: ['devt', 'dv'], //                                Indicate lan‐ guage/codeset sup‐ port\n  display_pc_char: ['dispc', 'S1'], //                                Display PC charac‐ ter #1\n  end_bit_image_region: ['endbi', 'Yy'], //                                End a bit-image region\n  enter_pc_charset_mode: ['smpch', 'S2'], //                                Enter PC character display mode\n  enter_scancode_mode: ['smsc', 'S4'], //                                Enter PC scancode mode\n  exit_pc_charset_mode: ['rmpch', 'S3'], //                                Exit PC character display mode\n  exit_scancode_mode: ['rmsc', 'S5'], //                                Exit PC scancode mode\n  get_mouse: ['getm', 'Gm'], //                                Curses should get button events, parameter #1 not documented.\n  key_mouse: ['kmous', 'Km'], //                                Mouse event has occurred\n  mouse_info: ['minfo', 'Mi'], //                                Mouse status information\n  pc_term_options: ['pctrm', 'S6'], //                                PC terminal options\n  pkey_plab: ['pfxl', 'xl'], //                                Program function key #1 to type string #2 and show string #3\n  req_mouse_pos: ['reqmp', 'RQ'], //                                Request mouse position\n\n  scancode_escape: ['scesc', 'S7'], //                                Escape for scan‐ code emulation\n  set0_des_seq: ['s0ds', 's0'], //                                Shift to codeset 0 (EUC set 0, ASCII)\n  set1_des_seq: ['s1ds', 's1'], //                                Shift to codeset 1\n  set2_des_seq: ['s2ds', 's2'], //                                Shift to codeset 2\n  set3_des_seq: ['s3ds', 's3'], //                                Shift to codeset 3\n  set_a_background: ['setab', 'AB'], //                                Set background color to #1, using ANSI escape\n  set_a_foreground: ['setaf', 'AF'], //                                Set foreground color to #1, using ANSI escape\n  set_color_band: ['setcolor', 'Yz'], //                                Change to ribbon color #1\n  set_lr_margin: ['smglr', 'ML'], //                                Set both left and right margins to #1, #2.  (ML is not in BSD term‐ cap).\n  set_page_length: ['slines', 'YZ'], //                                Set page length to #1 lines\n  set_tb_margin: ['smgtb', 'MT'], //                                Sets both top and bottom margins to #1, #2\n\n  // The XSI Curses standard added these.  They are some post-4.1 versions of System V curses, e.g., Solaris 2.5 and IRIX 6.x.  The ncurses termcap\n  // names for them are invented; according to the XSI Curses standard, they have no termcap names.  If your compiled terminfo entries  use  these,\n  // they may not be binary-compatible with System V terminfo entries after SVr4.1; beware!\n\n  //         Variable                                      Cap-                               TCap                                 Description\n  //          String                                       name                               Code\n  enter_horizontal_hl_mode: ['ehhlm', 'Xh'], //                               Enter horizontal highlight mode\n  enter_left_hl_mode: ['elhlm', 'Xl'], //                               Enter left highlight mode\n  enter_low_hl_mode: ['elohlm', 'Xo'], //                               Enter low highlight mode\n  enter_right_hl_mode: ['erhlm', 'Xr'], //                               Enter right high‐ light mode\n  enter_top_hl_mode: ['ethlm', 'Xt'], //                               Enter top highlight mode\n  enter_vertical_hl_mode: ['evhlm', 'Xv'], //                               Enter vertical high‐ light mode\n  set_a_attributes: ['sgr1', 'sA'], //                               Define second set of video attributes #1-#6\n  set_pglen_inch: ['slength', 'sL'], //                               YI Set page length to #1 hundredth of an inch\n};\n\nexport default alias;\n","// @ts-nocheck\n/**\n * tput.js - parse and compile terminfo caps to javascript.\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\n// Resources:\n//   $ man term\n//   $ man terminfo\n//   http://invisible-island.net/ncurses/man/term.5.html\n//   https://en.wikipedia.org/wiki/Terminfo\n\n// Todo:\n// - xterm's XT (set-title capability?) value should\n//   be true (at least tmux thinks it should).\n//   It's not parsed as true. Investigate.\n// - Possibly switch to other method of finding the\n//   extended data string table: i += h.symOffsetCount * 2;\n\n/**\n * Modules\n */\n\nimport assert from 'assert';\nimport path from 'path';\nimport fs from 'fs';\nimport cp from 'child_process';\nimport internalTerm from './internal-term.js';\nimport alias from './alias.js';\n\n/**\n * Tput\n */\n\ninterface TputOptions {\n  terminal?: string;\n  term?: string;\n  debug?: boolean;\n  padding?: boolean;\n  extended?: boolean;\n  printf?: boolean;\n  termcap?: boolean;\n  terminfoPrefix?: string;\n  terminfoFile?: string;\n  termcapFile?: string;\n  [key: string]: any;\n}\n\ninterface TerminfoData {\n  header: any;\n  dataSize: number;\n  name: string;\n  names: string[];\n  desc: string;\n  file: string;\n  booleans: { [key: string]: boolean };\n  numbers: { [key: string]: number };\n  strings: { [key: string]: string };\n}\n\ninterface TputInterface {\n  options: TputOptions;\n  terminal: string;\n  debug?: boolean;\n  padding?: boolean;\n  extended?: boolean;\n  printf?: boolean;\n  termcap?: boolean;\n  error: Error | null;\n  terminfoPrefix?: string;\n  terminfoFile?: string;\n  termcapFile?: string;\n\n  // Methods\n  setup(): void;\n  term(is: string): boolean;\n  readTerminfo(term?: string): TerminfoData;\n  parseTerminfo(data: Buffer, file?: string): TerminfoData;\n  injectTerminfo(file?: string): void;\n  injectTermcap(file?: string): void;\n  [key: string]: any;\n}\n\nfunction Tput(\n  this: TputInterface,\n  options?: TputOptions | string\n): TputInterface {\n  if (!(this instanceof Tput)) {\n    return new Tput(options);\n  }\n\n  options = options || {};\n  if (typeof options === 'string') {\n    options = { terminal: options };\n  }\n\n  this.options = options;\n  this.terminal =\n    options.terminal ||\n    options.term ||\n    process.env.TERM ||\n    (process.platform === 'win32' ? 'windows-ansi' : 'xterm');\n\n  this.terminal = this.terminal.toLowerCase();\n\n  this.debug = options.debug;\n  this.padding = options.padding;\n  this.extended = options.extended;\n  this.printf = options.printf;\n  this.termcap = options.termcap;\n  this.error = null;\n\n  this.terminfoPrefix = options.terminfoPrefix;\n  this.terminfoFile = options.terminfoFile;\n  this.termcapFile = options.termcapFile;\n\n  if (options.terminal || options.term) {\n    this.setup();\n  }\n}\n\nTput.prototype.setup = function (this: TputInterface): void {\n  this.error = null;\n  try {\n    if (this.termcap) {\n      try {\n        this.injectTermcap();\n      } catch (e) {\n        if (this.debug) throw e;\n        this.error = new Error('Termcap parse error.');\n        this._useInternalCap(this.terminal);\n      }\n    } else {\n      try {\n        this.injectTerminfo();\n      } catch (e) {\n        if (this.debug) throw e;\n        this.error = new Error('Terminfo parse error.');\n        this._useInternalInfo(this.terminal);\n      }\n    }\n  } catch (e) {\n    // If there was an error, fallback\n    // to an internally stored terminfo/cap.\n    if (this.debug) throw e;\n    this.error = new Error('Terminfo not found.');\n    this._useXtermInfo();\n  }\n};\n\nTput.prototype.term = function (this: TputInterface, is: string): boolean {\n  return this.terminal.indexOf(is) === 0;\n};\n\nTput.prototype._debug = function (this: TputInterface, ...args: any[]): void {\n  if (!this.debug) return;\n  return console.log.apply(console, arguments);\n};\n\n/**\n * Fallback\n */\n\nTput.prototype._useVt102Cap = function (this: TputInterface): void {\n  return this.injectTermcap('vt102');\n};\n\nTput.prototype._useXtermCap = function (this: TputInterface): void {\n  return this.injectTermcap(__dirname + '/../usr/xterm.termcap');\n};\n\nTput.prototype._useXtermInfo = function (this: TputInterface): void {\n  try {\n    return this.injectTerminfo(require.resolve('../usr/xterm'));\n  } catch (e) {\n    var buf = Buffer.from(internalTerm['xterm'], 'base64');\n    var info = this.compile(this.parseTerminfo(buf, 'xterm'));\n    return this.inject(info);\n  }\n};\n\nTput.prototype._useInternalInfo = function (\n  this: TputInterface,\n  name: string\n): void {\n  name = path.basename(name);\n  try {\n    return this.injectTerminfo(require.resolve('../usr/' + name));\n  } catch (e) {\n    if (internalTerm[name]) {\n      var buf = Buffer.from(internalTerm[name], 'base64');\n      var info = this.compile(this.parseTerminfo(buf, name));\n      return this.inject(info);\n    }\n    throw e;\n  }\n};\n\nTput.prototype._useInternalCap = function (\n  this: TputInterface,\n  name: string\n): void {\n  name = path.basename(name);\n  try {\n    return this.injectTermcap(require.resolve('../usr/' + name + '.termcap'));\n  } catch (e) {\n    if (internalTerm[name]) {\n      // We don't have termcap fallback; terminfo should suffice\n      var buf = Buffer.from(internalTerm[name], 'base64');\n      var info = this.compile(this.parseTerminfo(buf, name));\n      return this.inject(info);\n    }\n    throw e;\n  }\n};\n\n/**\n * Terminfo\n */\n\nTput.ipaths = [\n  process.env.TERMINFO || '',\n  (process.env.TERMINFO_DIRS || '').split(':'),\n  (process.env.HOME || '') + '/.terminfo',\n  '/usr/share/terminfo',\n  '/usr/share/lib/terminfo',\n  '/usr/lib/terminfo',\n  '/usr/local/share/terminfo',\n  '/usr/local/share/lib/terminfo',\n  '/usr/local/lib/terminfo',\n  '/usr/local/ncurses/lib/terminfo',\n  '/lib/terminfo',\n];\n\nTput.prototype.readTerminfo = function (\n  this: TputInterface,\n  term?: string\n): TerminfoData {\n  var data: Buffer, file: string, info: TerminfoData;\n\n  term = term || this.terminal;\n\n  // Use inlined terminfo buffer if we have it.\n  if (internalTerm[term]) {\n    info = this.parseTerminfo(\n      Buffer.from(internalTerm[term], 'base64'),\n      '<inline:' + term + '>'\n    );\n  } else {\n    file = path.normalize(this._prefix(term));\n    data = fs.readFileSync(file);\n    info = this.parseTerminfo(data, file);\n  }\n\n  if (this.debug) {\n    this._terminfo = info;\n  }\n\n  return info;\n};\n\nTput._prefix = Tput.prototype._prefix = function (\n  this: TputInterface,\n  term?: string\n): string {\n  // If we have a terminfoFile, or our\n  // term looks like a filename, use it.\n  if (term) {\n    if (~term.indexOf(path.sep)) {\n      return term;\n    }\n    if (this.terminfoFile) {\n      return this.terminfoFile;\n    }\n  }\n\n  var paths = Tput.ipaths.slice(),\n    file: string | null;\n\n  if (this.terminfoPrefix) {\n    paths.unshift(this.terminfoPrefix);\n  }\n\n  // Try exact matches.\n  file = this._tprefix(paths, term);\n  if (file) return file;\n\n  // Try similar matches.\n  file = this._tprefix(paths, term, true);\n  if (file) return file;\n\n  // Not found.\n  throw new Error('Terminfo directory not found.');\n};\n\nTput._tprefix = Tput.prototype._tprefix = function (\n  this: TputInterface,\n  prefix: string | string[],\n  term: string,\n  soft?: boolean\n): string | null {\n  if (!prefix) return;\n\n  var file: string | null,\n    dir: string,\n    i: number,\n    sdiff: number,\n    sfile: string,\n    list: string[];\n\n  if (Array.isArray(prefix)) {\n    for (i = 0; i < prefix.length; i++) {\n      file = this._tprefix(prefix[i], term, soft);\n      if (file) return file;\n    }\n    return;\n  }\n\n  var find = function (word: string): string | null {\n    var file: string, ch: string;\n\n    file = path.resolve(prefix, word[0]);\n    try {\n      fs.statSync(file);\n      return file;\n    } catch (e) {}\n\n    ch = word[0].charCodeAt(0).toString(16);\n    if (ch.length < 2) ch = '0' + ch;\n\n    file = path.resolve(prefix, ch);\n    try {\n      fs.statSync(file);\n      return file;\n    } catch (e) {}\n  };\n\n  if (!term) {\n    // Make sure the directory's sub-directories\n    // are all one-letter, or hex digits.\n    // return find('x') ? prefix : null;\n    try {\n      dir = fs.readdirSync(prefix).filter(function (file) {\n        return file.length !== 1 && !/^[0-9a-fA-F]{2}$/.test(file);\n      });\n      if (!dir.length) {\n        return prefix;\n      }\n    } catch (e) {}\n    return;\n  }\n\n  term = path.basename(term);\n  dir = find(term);\n\n  if (!dir) return;\n\n  if (soft) {\n    try {\n      list = fs.readdirSync(dir);\n    } catch (e) {\n      return;\n    }\n\n    list.forEach(function (file) {\n      if (file.indexOf(term) === 0) {\n        var diff = file.length - term.length;\n        if (!sfile || diff < sdiff) {\n          sdiff = diff;\n          sfile = file;\n        }\n      }\n    });\n\n    return sfile && (soft || sdiff === 0) ? path.resolve(dir, sfile) : null;\n  }\n\n  file = path.resolve(dir, term);\n  try {\n    fs.statSync(file);\n    return file;\n  } catch (e) {}\n};\n\n/**\n * Terminfo Parser\n * All shorts are little-endian\n */\n\nTput.prototype.parseTerminfo = function (\n  this: TputInterface,\n  data: Buffer,\n  file?: string\n): TerminfoData {\n  var info: any = {},\n    extended: boolean,\n    l = data.length,\n    i = 0,\n    v: any,\n    o: any;\n\n  var h = (info.header = {\n    dataSize: data.length,\n    headerSize: 12,\n    magicNumber: (data[1] << 8) | data[0],\n    namesSize: (data[3] << 8) | data[2],\n    boolCount: (data[5] << 8) | data[4],\n    numCount: (data[7] << 8) | data[6],\n    strCount: (data[9] << 8) | data[8],\n    strTableSize: (data[11] << 8) | data[10],\n  });\n\n  h.total =\n    h.headerSize +\n    h.namesSize +\n    h.boolCount +\n    h.numCount * 2 +\n    h.strCount * 2 +\n    h.strTableSize;\n\n  i += h.headerSize;\n\n  // Names Section\n  var names = data.toString('ascii', i, i + h.namesSize - 1),\n    parts = names.split('|'),\n    name = parts[0],\n    desc = parts.pop() || '';\n\n  info.name = name;\n  info.names = parts;\n  info.desc = desc;\n\n  info.dir = path.resolve(file, '..', '..');\n  info.file = file;\n\n  i += h.namesSize - 1;\n\n  // Names is nul-terminated.\n  assert.equal(data[i], 0);\n  i++;\n\n  // Booleans Section\n  // One byte for each flag\n  // Same order as <term.h>\n  info.bools = {};\n  l = i + h.boolCount;\n  o = 0;\n  for (; i < l; i++) {\n    v = Tput.bools[o++];\n    info.bools[v] = data[i] === 1;\n  }\n\n  // Null byte in between to make sure numbers begin on an even byte.\n  if (i % 2) {\n    assert.equal(data[i], 0);\n    i++;\n  }\n\n  // Numbers Section\n  info.numbers = {};\n  l = i + h.numCount * 2;\n  o = 0;\n  for (; i < l; i += 2) {\n    v = Tput.numbers[o++];\n    if (data[i + 1] === 0xff && data[i] === 0xff) {\n      info.numbers[v] = -1;\n    } else {\n      info.numbers[v] = (data[i + 1] << 8) | data[i];\n    }\n  }\n\n  // Strings Section\n  info.strings = {};\n  l = i + h.strCount * 2;\n  o = 0;\n  for (; i < l; i += 2) {\n    v = Tput.strings[o++];\n    if (data[i + 1] === 0xff && data[i] === 0xff) {\n      info.strings[v] = -1;\n    } else {\n      info.strings[v] = (data[i + 1] << 8) | data[i];\n    }\n  }\n\n  // String Table\n  Object.keys(info.strings).forEach(function (key) {\n    if (info.strings[key] === -1) {\n      delete info.strings[key];\n      return;\n    }\n\n    // Workaround: fix an odd bug in the screen-256color terminfo where it tries\n    // to set -1, but it appears to have {0xfe, 0xff} instead of {0xff, 0xff}.\n    // TODO: Possibly handle errors gracefully below, as well as in the\n    // extended info. Also possibly do: `if (info.strings[key] >= data.length)`.\n    if (info.strings[key] === 65534) {\n      delete info.strings[key];\n      return;\n    }\n\n    var s = i + info.strings[key],\n      j = s;\n\n    while (data[j]) j++;\n\n    assert(j < data.length);\n\n    info.strings[key] = data.toString('ascii', s, j);\n  });\n\n  // Extended Header\n  if (this.extended !== false) {\n    i--;\n    i += h.strTableSize;\n    if (i % 2) {\n      assert.equal(data[i], 0);\n      i++;\n    }\n    l = data.length;\n    if (i < l - 1) {\n      try {\n        extended = this.parseExtended(data.slice(i));\n      } catch (e) {\n        if (this.debug) {\n          throw e;\n        }\n        return info;\n      }\n      info.header.extended = extended.header;\n      ['bools', 'numbers', 'strings'].forEach(function (key) {\n        merge(info[key], extended[key]);\n      });\n    }\n  }\n\n  return info;\n};\n\n/**\n * Extended Parsing\n */\n\n// Some data to help understand:\n\n// For xterm, non-extended header:\n// { dataSize: 3270,\n//   headerSize: 12,\n//   magicNumber: 282,\n//   namesSize: 48,\n//   boolCount: 38,\n//   numCount: 15,\n//   strCount: 413,\n//   strTableSize: 1388,\n//   total: 2342 }\n\n// For xterm, header:\n// Offset: 2342\n// { header:\n//    { dataSize: 928,\n//      headerSize: 10,\n//      boolCount: 2,\n//      numCount: 1,\n//      strCount: 57,\n//      strTableSize: 117,\n//      lastStrTableOffset: 680,\n//      total: 245 },\n\n// For xterm, layout:\n// { header: '0 - 10', // length: 10\n//   bools: '10 - 12', // length: 2\n//   numbers: '12 - 14', // length: 2\n//   strings: '14 - 128', // length: 114 (57 short)\n//   symoffsets: '128 - 248', // length: 120 (60 short)\n//   stringtable: '248 - 612', // length: 364\n//   sym: '612 - 928' } // length: 316\n//\n// How lastStrTableOffset works:\n//   data.length - h.lastStrTableOffset === 248\n//     (sym-offset end, string-table start)\n//   364 + 316 === 680 (lastStrTableOffset)\n// How strTableSize works:\n//   h.strCount + [symOffsetCount] === h.strTableSize\n//   57 + 60 === 117 (strTableSize)\n//   symOffsetCount doesn't actually exist in the header. it's just implied.\n// Getting the number of sym offsets:\n//   h.symOffsetCount = h.strTableSize - h.strCount;\n//   h.symOffsetSize = (h.strTableSize - h.strCount) * 2;\n\nTput.prototype.parseExtended = function (data) {\n  var info = {},\n    l = data.length,\n    i = 0;\n\n  var h = (info.header = {\n    dataSize: data.length,\n    headerSize: 10,\n    boolCount: (data[i + 1] << 8) | data[i + 0],\n    numCount: (data[i + 3] << 8) | data[i + 2],\n    strCount: (data[i + 5] << 8) | data[i + 4],\n    strTableSize: (data[i + 7] << 8) | data[i + 6],\n    lastStrTableOffset: (data[i + 9] << 8) | data[i + 8],\n  });\n\n  // h.symOffsetCount = h.strTableSize - h.strCount;\n\n  h.total =\n    h.headerSize +\n    h.boolCount +\n    h.numCount * 2 +\n    h.strCount * 2 +\n    h.strTableSize;\n\n  i += h.headerSize;\n\n  // Booleans Section\n  // One byte for each flag\n  var _bools = [];\n  l = i + h.boolCount;\n  for (; i < l; i++) {\n    _bools.push(data[i] === 1);\n  }\n\n  // Null byte in between to make sure numbers begin on an even byte.\n  if (i % 2) {\n    assert.equal(data[i], 0);\n    i++;\n  }\n\n  // Numbers Section\n  var _numbers = [];\n  l = i + h.numCount * 2;\n  for (; i < l; i += 2) {\n    if (data[i + 1] === 0xff && data[i] === 0xff) {\n      _numbers.push(-1);\n    } else {\n      _numbers.push((data[i + 1] << 8) | data[i]);\n    }\n  }\n\n  // Strings Section\n  var _strings = [];\n  l = i + h.strCount * 2;\n  for (; i < l; i += 2) {\n    if (data[i + 1] === 0xff && data[i] === 0xff) {\n      _strings.push(-1);\n    } else {\n      _strings.push((data[i + 1] << 8) | data[i]);\n    }\n  }\n\n  // Pass over the sym offsets and get to the string table.\n  i = data.length - h.lastStrTableOffset;\n  // Might be better to do this instead if the file has trailing bytes:\n  // i += h.symOffsetCount * 2;\n\n  // String Table\n  var high = 0;\n  _strings.forEach(function (offset, k) {\n    if (offset === -1) {\n      _strings[k] = '';\n      return;\n    }\n\n    var s = i + offset,\n      j = s;\n\n    while (data[j]) j++;\n\n    assert(j < data.length);\n\n    // Find out where the string table ends by\n    // getting the highest string length.\n    if (high < j - i) {\n      high = j - i;\n    }\n\n    _strings[k] = data.toString('ascii', s, j);\n  });\n\n  // Symbol Table\n  // Add one to the highest string length because we didn't count \\0.\n  i += high + 1;\n  l = data.length;\n\n  var sym = [],\n    j;\n\n  for (; i < l; i++) {\n    j = i;\n    while (data[j]) j++;\n    sym.push(data.toString('ascii', i, j));\n    i = j;\n  }\n\n  // Identify by name\n  j = 0;\n\n  info.bools = {};\n  _bools.forEach(function (bool) {\n    info.bools[sym[j++]] = bool;\n  });\n\n  info.numbers = {};\n  _numbers.forEach(function (number) {\n    info.numbers[sym[j++]] = number;\n  });\n\n  info.strings = {};\n  _strings.forEach(function (string) {\n    info.strings[sym[j++]] = string;\n  });\n\n  // Should be the very last bit of data.\n  assert.equal(i, data.length);\n\n  return info;\n};\n\nTput.prototype.compileTerminfo = function (term) {\n  return this.compile(this.readTerminfo(term));\n};\n\nTput.prototype.injectTerminfo = function (\n  this: TputInterface,\n  term?: string\n): void {\n  return this.inject(this.compileTerminfo(term));\n};\n\n/**\n * Compiler - terminfo cap->javascript\n */\n\nTput.prototype.compile = function (\n  this: TputInterface,\n  info: TerminfoData\n): any {\n  var self = this;\n\n  if (!info) {\n    throw new Error('Terminal not found.');\n  }\n\n  this.detectFeatures(info);\n\n  this._debug(info);\n\n  info.all = {};\n  info.methods = {};\n\n  ['bools', 'numbers', 'strings'].forEach(function (type) {\n    Object.keys(info[type]).forEach(function (key) {\n      info.all[key] = info[type][key];\n      info.methods[key] = self._compile(info, key, info.all[key]);\n    });\n  });\n\n  Tput.bools.forEach(function (key) {\n    if (info.methods[key] == null) info.methods[key] = false;\n  });\n\n  Tput.numbers.forEach(function (key) {\n    if (info.methods[key] == null) info.methods[key] = -1;\n  });\n\n  Tput.strings.forEach(function (key) {\n    if (!info.methods[key]) info.methods[key] = noop;\n  });\n\n  Object.keys(info.methods).forEach(function (key) {\n    if (!Tput.alias[key]) return;\n    Tput.alias[key].forEach(function (alias) {\n      info.methods[alias] = info.methods[key];\n    });\n    // Could just use:\n    // Object.keys(Tput.aliasMap).forEach(function(key) {\n    //   info.methods[key] = info.methods[Tput.aliasMap[key]];\n    // });\n  });\n\n  return info;\n};\n\nTput.prototype.inject = function (this: TputInterface, info: any): void {\n  var self = this,\n    methods = info.methods || info;\n\n  Object.keys(methods).forEach(function (key) {\n    if (typeof methods[key] !== 'function') {\n      self[key] = methods[key];\n      return;\n    }\n    self[key] = function () {\n      var args = Array.prototype.slice.call(arguments);\n      return methods[key].call(self, args);\n    };\n  });\n\n  this.info = info;\n  this.all = info.all;\n  this.methods = info.methods;\n  this.bools = info.bools;\n  this.numbers = info.numbers;\n  this.strings = info.strings;\n\n  if (!~info.names.indexOf(this.terminal)) {\n    this.terminal = info.name;\n  }\n\n  this.features = info.features;\n  Object.keys(info.features).forEach(function (key) {\n    if (key === 'padding') {\n      if (!info.features.padding && self.options.padding !== true) {\n        self.padding = false;\n      }\n      return;\n    }\n    self[key] = info.features[key];\n  });\n};\n\n// See:\n// ~/ncurses/ncurses/tinfo/lib_tparm.c\n// ~/ncurses/ncurses/tinfo/comp_scan.c\nTput.prototype._compile = function (\n  this: TputInterface,\n  info: TerminfoData,\n  key: string,\n  str: any\n): Function {\n  var v: any;\n\n  this._debug('Compiling %s: %s', key, JSON.stringify(str));\n\n  switch (typeof str) {\n    case 'boolean':\n      return str;\n    case 'number':\n      return str;\n    case 'string':\n      break;\n    default:\n      return noop;\n  }\n\n  if (!str) {\n    return noop;\n  }\n\n  // See:\n  // ~/ncurses/progs/tput.c - tput() - L149\n  // ~/ncurses/progs/tset.c - set_init() - L992\n  if (key === 'init_file' || key === 'reset_file') {\n    try {\n      str = fs.readFileSync(str, 'utf8');\n      if (this.debug) {\n        v = ('return ' + JSON.stringify(str) + ';')\n          .replace(/\\x1b/g, '\\\\x1b')\n          .replace(/\\r/g, '\\\\r')\n          .replace(/\\n/g, '\\\\n');\n        process.stdout.write(v + '\\n');\n      }\n      return function () {\n        return str;\n      };\n    } catch (e) {\n      return noop;\n    }\n  }\n\n  var tkey = info.name + '.' + key,\n    header = 'var v, dyn = {}, stat = {}, stack = [], out = [];',\n    footer = ';return out.join(\"\");',\n    code = header,\n    val = str,\n    buff = '',\n    cap,\n    ch,\n    fi,\n    then,\n    els,\n    end;\n\n  function read(regex, no) {\n    cap = regex.exec(val);\n    if (!cap) return;\n    val = val.substring(cap[0].length);\n    ch = cap[1];\n    if (!no) clear();\n    return cap;\n  }\n\n  function stmt(c) {\n    if (code[code.length - 1] === ',') {\n      code = code.slice(0, -1);\n    }\n    code += c;\n  }\n\n  function expr(c) {\n    code += c + ',';\n  }\n\n  function echo(c) {\n    if (c === '\"\"') return;\n    expr('out.push(' + c + ')');\n  }\n\n  function print(c) {\n    buff += c;\n  }\n\n  function clear() {\n    if (buff) {\n      echo(JSON.stringify(buff).replace(/\\\\u00([0-9a-fA-F]{2})/g, '\\\\x$1'));\n      buff = '';\n    }\n  }\n\n  while (val) {\n    // Ignore newlines\n    if (read(/^\\n /, true)) {\n      continue;\n    }\n\n    // '^A' -> ^A\n    if (read(/^\\^(.)/i, true)) {\n      if (!(ch >= ' ' && ch <= '~')) {\n        this._debug('%s: bad caret char.', tkey);\n        // NOTE: ncurses appears to simply\n        // continue in this situation, but\n        // I could be wrong.\n        print(cap[0]);\n        continue;\n      }\n      if (ch === '?') {\n        ch = '\\x7f';\n      } else {\n        ch = ch.charCodeAt(0) & 31;\n        if (ch === 0) ch = 128;\n        ch = String.fromCharCode(ch);\n      }\n      print(ch);\n      continue;\n    }\n\n    // 3 octal digits -> character\n    if (read(/^\\\\([0-7]{3})/, true)) {\n      print(String.fromCharCode(parseInt(ch, 8)));\n      continue;\n    }\n\n    // '\\e' -> ^[\n    // '\\n' -> \\n\n    // '\\r' -> \\r\n    // '\\0' -> \\200 (special case)\n    if (read(/^\\\\([eEnlrtbfs\\^\\\\,:0]|.)/, true)) {\n      switch (ch) {\n        case 'e':\n        case 'E':\n          ch = '\\x1b';\n          break;\n        case 'n':\n          ch = '\\n';\n          break;\n        case 'l':\n          ch = '\\x85';\n          break;\n        case 'r':\n          ch = '\\r';\n          break;\n        case 't':\n          ch = '\\t';\n          break;\n        case 'b':\n          ch = '\\x08';\n          break;\n        case 'f':\n          ch = '\\x0c';\n          break;\n        case 's':\n          ch = ' ';\n          break;\n        case '^':\n          ch = '^';\n          break;\n        case '\\\\':\n          ch = '\\\\';\n          break;\n        case ',':\n          ch = ',';\n          break;\n        case ':':\n          ch = ':';\n          break;\n        case '0':\n          ch = '\\x80';\n          break;\n        case 'a':\n          ch = '\\x07';\n          break;\n        default:\n          this._debug('%s: bad backslash char.', tkey);\n          ch = cap[0];\n          break;\n      }\n      print(ch);\n      continue;\n    }\n\n    // $<5> -> padding\n    // e.g. flash_screen: '\\u001b[?5h$<100/>\\u001b[?5l',\n    if (read(/^\\$<(\\d+)([*\\/]{0,2})>/, true)) {\n      if (this.padding) print(cap[0]);\n      continue;\n    }\n\n    // %%   outputs `%'\n    if (read(/^%%/, true)) {\n      print('%');\n      continue;\n    }\n\n    // %[[:]flags][width[.precision]][doxXs]\n    //   as in printf, flags are [-+#] and space.  Use a `:' to allow the\n    //   next character to be a `-' flag, avoiding interpreting \"%-\" as an\n    //   operator.\n    // %c   print pop() like %c in printf\n    // Example from screen terminfo:\n    //   S0: \"\\u001b(%p1%c\"\n    // %d   print pop()\n    // \"Print (e.g., \"%d\") is a special case.\"\n    // %s   print pop() like %s in printf\n    if (read(/^%((?::-|[+# ]){1,4})?(\\d+(?:\\.\\d+)?)?([doxXsc])/)) {\n      if (this.printf || cap[1] || cap[2] || ~'oxX'.indexOf(cap[3])) {\n        echo('sprintf(\"' + cap[0].replace(':-', '-') + '\", stack.pop())');\n      } else if (cap[3] === 'c') {\n        echo(\n          '(v = stack.pop(), isFinite(v) ' +\n            '? String.fromCharCode(v || 0200) : \"\")'\n        );\n      } else {\n        echo('stack.pop()');\n      }\n      continue;\n    }\n\n    // %p[1-9]\n    //   push i'th parameter\n    if (read(/^%p([1-9])/)) {\n      expr('(stack.push(v = params[' + (ch - 1) + ']), v)');\n      continue;\n    }\n\n    // %P[a-z]\n    //   set dynamic variable [a-z] to pop()\n    if (read(/^%P([a-z])/)) {\n      expr('dyn.' + ch + ' = stack.pop()');\n      continue;\n    }\n\n    // %g[a-z]\n    //   get dynamic variable [a-z] and push it\n    if (read(/^%g([a-z])/)) {\n      expr('(stack.push(dyn.' + ch + '), dyn.' + ch + ')');\n      continue;\n    }\n\n    // %P[A-Z]\n    //   set static variable [a-z] to pop()\n    if (read(/^%P([A-Z])/)) {\n      expr('stat.' + ch + ' = stack.pop()');\n      continue;\n    }\n\n    // %g[A-Z]\n    //   get static variable [a-z] and push it\n    //   The  terms  \"static\"  and  \"dynamic\" are misleading.  Historically,\n    //   these are simply two different sets of variables, whose values are\n    //   not reset between calls to tparm.  However, that fact is not\n    //   documented in other implementations.  Relying on it will adversely\n    //   impact portability to other implementations.\n    if (read(/^%g([A-Z])/)) {\n      expr('(stack.push(v = stat.' + ch + '), v)');\n      continue;\n    }\n\n    // %'c' char constant c\n    // NOTE: These are stored as c chars, exemplified by:\n    // cursor_address: \"\\u001b=%p1%' '%+%c%p2%' '%+%c\"\n    if (read(/^%'(.)'/)) {\n      expr('(stack.push(v = ' + ch.charCodeAt(0) + '), v)');\n      continue;\n    }\n\n    // %{nn}\n    //   integer constant nn\n    if (read(/^%\\{(\\d+)\\}/)) {\n      expr('(stack.push(v = ' + ch + '), v)');\n      continue;\n    }\n\n    // %l   push strlen(pop)\n    if (read(/^%l/)) {\n      expr('(stack.push(v = (stack.pop() || \"\").length || 0), v)');\n      continue;\n    }\n\n    // %+ %- %* %/ %m\n    //   arithmetic (%m is mod): push(pop() op pop())\n    // %& %| %^\n    //   bit operations (AND, OR and exclusive-OR): push(pop() op pop())\n    // %= %> %<\n    //   logical operations: push(pop() op pop())\n    if (read(/^%([+\\-*\\/m&|\\^=><])/)) {\n      if (ch === '=') ch = '===';\n      else if (ch === 'm') ch = '%';\n      expr(\n        '(v = stack.pop(),' +\n          ' stack.push(v = (stack.pop() ' +\n          ch +\n          ' v) || 0),' +\n          ' v)'\n      );\n      continue;\n    }\n\n    // %A, %O\n    //   logical AND and OR operations (for conditionals)\n    if (read(/^%([AO])/)) {\n      // Are we supposed to store the result on the stack?\n      expr(\n        '(stack.push(v = (stack.pop() ' +\n          (ch === 'A' ? '&&' : '||') +\n          ' stack.pop())), v)'\n      );\n      continue;\n    }\n\n    // %! %~\n    //   unary operations (logical and bit complement): push(op pop())\n    if (read(/^%([!~])/)) {\n      expr('(stack.push(v = ' + ch + 'stack.pop()), v)');\n      continue;\n    }\n\n    // %i   add 1 to first two parameters (for ANSI terminals)\n    if (read(/^%i/)) {\n      // Are these supposed to go on the stack in certain situations?\n      // ncurses doesn't seem to put them on the stack, but xterm.user6\n      // seems to assume they're on the stack for some reason. Could\n      // just be a bad terminfo string.\n      // user6: \"\\u001b[%i%d;%dR\" - possibly a termcap-style string.\n      // expr('(params[0] |= 0, params[1] |= 0, params[0]++, params[1]++)');\n      expr('(params[0]++, params[1]++)');\n      continue;\n    }\n\n    // %? expr %t thenpart %e elsepart %;\n    //   This forms an if-then-else.  The %e elsepart is optional.  Usually\n    //   the %? expr part pushes a value onto the stack, and %t pops it from\n    //   the stack, testing if it is nonzero (true).  If it is zero (false),\n    //   control passes to the %e (else) part.\n    //   It is possible to form else-if's a la Algol 68:\n    //     %? c1 %t b1 %e c2 %t b2 %e c3 %t b3 %e c4 %t b4 %e %;\n    //   where ci are conditions, bi are bodies.\n    if (read(/^%\\?/)) {\n      end = -1;\n      stmt(';if (');\n      continue;\n    }\n\n    if (read(/^%t/)) {\n      end = -1;\n      // Technically this is supposed to pop everything off the stack that was\n      // pushed onto the stack after the if statement, see man terminfo.\n      // Right now, we don't pop anything off. This could cause compat issues.\n      // Perhaps implement a \"pushed\" counter from the time the if statement\n      // is added, to the time the then statement is added, and pop off\n      // the appropriate number of elements.\n      // while (pushed--) expr('stack.pop()');\n      stmt(') {');\n      continue;\n    }\n\n    // Terminfo does elseif's like\n    // this: %?[expr]%t...%e[expr]%t...%;\n    if (read(/^%e/)) {\n      fi = val.indexOf('%?');\n      then = val.indexOf('%t');\n      els = val.indexOf('%e');\n      end = val.indexOf('%;');\n      if (end === -1) end = Infinity;\n      if (\n        then !== -1 &&\n        then < end &&\n        (fi === -1 || then < fi) &&\n        (els === -1 || then < els)\n      ) {\n        stmt('} else if (');\n      } else {\n        stmt('} else {');\n      }\n      continue;\n    }\n\n    if (read(/^%;/)) {\n      end = null;\n      stmt('}');\n      continue;\n    }\n\n    buff += val[0];\n    val = val.substring(1);\n  }\n\n  // Clear the buffer of any remaining text.\n  clear();\n\n  // Some terminfos (I'm looking at you, atari-color), don't end an if\n  // statement. It's assumed terminfo will automatically end it for\n  // them, because they are a bunch of lazy bastards.\n  if (end != null) {\n    stmt('}');\n  }\n\n  // Add the footer.\n  stmt(footer);\n\n  // Optimize and cleanup generated code.\n  v = code.slice(header.length, -footer.length);\n  if (!v.length) {\n    code = 'return \"\";';\n  } else if ((v = /^out\\.push\\((\"(?:[^\"]|\\\\\")+\")\\)$/.exec(v))) {\n    code = 'return ' + v[1] + ';';\n  } else {\n    // Turn `(stack.push(v = params[0]), v),out.push(stack.pop())`\n    // into `out.push(params[0])`.\n    code = code.replace(\n      /\\(stack\\.push\\(v = params\\[(\\d+)\\]\\), v\\),out\\.push\\(stack\\.pop\\(\\)\\)/g,\n      'out.push(params[$1])'\n    );\n\n    // Remove unnecessary variable initializations.\n    v = code.slice(header.length, -footer.length);\n    if (!~v.indexOf('v = ')) code = code.replace('v, ', '');\n    if (!~v.indexOf('dyn')) code = code.replace('dyn = {}, ', '');\n    if (!~v.indexOf('stat')) code = code.replace('stat = {}, ', '');\n    if (!~v.indexOf('stack')) code = code.replace('stack = [], ', '');\n\n    // Turn `var out = [];out.push(\"foo\"),` into `var out = [\"foo\"];`.\n    code = code.replace(\n      /out = \\[\\];out\\.push\\((\"(?:[^\"]|\\\\\")+\")\\),/,\n      'out = [$1];'\n    );\n  }\n\n  // Terminfos `wyse350-vb`, and `wy350-w`\n  // seem to have a few broken strings.\n  if (str === '\\u001b%?') {\n    code = 'return \"\\\\x1b\";';\n  }\n\n  if (this.debug) {\n    v = code\n      .replace(/\\x1b/g, '\\\\x1b')\n      .replace(/\\r/g, '\\\\r')\n      .replace(/\\n/g, '\\\\n');\n    process.stdout.write(v + '\\n');\n  }\n\n  try {\n    if (this.options.stringify && code.indexOf('return ') === 0) {\n      return new Function('', code)();\n    }\n    return this.printf || ~code.indexOf('sprintf(')\n      ? new Function('sprintf, params', code).bind(null, sprintf)\n      : new Function('params', code);\n  } catch (e) {\n    // Suppress error output for known problematic capabilities but still throw\n    // This allows the capability to be properly excluded without ugly console output\n    if (this.debug) {\n      console.error('');\n      console.error('Error on %s:', tkey);\n      console.error(JSON.stringify(str));\n      console.error('');\n      console.error(code.replace(/(,|;)/g, '$1\\n'));\n      e.stack = e.stack.replace(/\\x1b/g, '\\\\x1b');\n      console.error(e.stack);\n    }\n    throw e;\n  }\n};\n\n// See: ~/ncurses/ncurses/tinfo/lib_tputs.c\nTput.prototype._print = function (code, print, done) {\n  var xon = !this.bools.needs_xon_xoff || this.bools.xon_xoff;\n\n  print = print || write;\n  done = done || noop;\n\n  if (!this.padding) {\n    print(code);\n    return done();\n  }\n\n  var parts = code.split(/(?=\\$<[\\d.]+[*\\/]{0,2}>)/),\n    i = 0;\n\n  (function next() {\n    if (i === parts.length) {\n      return done();\n    }\n\n    var part = parts[i++],\n      padding = /^\\$<([\\d.]+)([*\\/]{0,2})>/.exec(part),\n      amount,\n      suffix;\n    // , affect;\n\n    if (!padding) {\n      print(part);\n      return next();\n    }\n\n    part = part.substring(padding[0].length);\n    amount = +padding[1];\n    suffix = padding[2];\n\n    // A `/'  suffix indicates  that  the  padding  is  mandatory and forces a\n    // delay of the given number of milliseconds even on devices for which xon\n    // is present to indicate flow control.\n    if (xon && !~suffix.indexOf('/')) {\n      print(part);\n      return next();\n    }\n\n    // A `*' indicates that the padding required is proportional to the number\n    // of lines affected by the operation, and  the amount  given  is the\n    // per-affected-unit padding required.  (In the case of insert character,\n    // the factor is still the number of lines affected.) Normally, padding is\n    // advisory if the device has the xon capability; it is used for cost\n    // computation but does not trigger delays.\n    if (~suffix.indexOf('*')) {\n      // XXX Disable this for now.\n      amount = amount;\n      // if (affect = /\\x1b\\[(\\d+)[LM]/.exec(part)) {\n      //   amount *= +affect[1];\n      // }\n      // The above is a huge workaround. In reality, we need to compile\n      // `_print` into the string functions and check the cap name and\n      // params.\n      // if (cap === 'insert_line' || cap === 'delete_line') {\n      //   amount *= params[0];\n      // }\n      // if (cap === 'clear_screen') {\n      //   amount *= process.stdout.rows;\n      // }\n    }\n\n    return setTimeout(function () {\n      print(part);\n      return next();\n    }, amount);\n  })();\n};\n\n// A small helper function if we want\n// to easily output text with setTimeouts.\nTput.print = function () {\n  var fake = {\n    padding: true,\n    bools: { needs_xon_xoff: true, xon_xoff: false },\n  };\n  return Tput.prototype._print.apply(fake, arguments);\n};\n\n/**\n * Termcap\n */\n\nTput.cpaths = [\n  process.env.TERMCAP || '',\n  (process.env.TERMPATH || '').split(/[: ]/),\n  (process.env.HOME || '') + '/.termcap',\n  '/usr/share/misc/termcap',\n  '/etc/termcap',\n];\n\nTput.prototype.readTermcap = function (term) {\n  var self = this,\n    terms,\n    term_,\n    root,\n    paths;\n\n  term = term || this.terminal;\n\n  // Termcap has a bunch of terminals usually stored in one file/string,\n  // so we need to find the one containing our desired terminal.\n  if (~term.indexOf(path.sep) && (terms = this._tryCap(path.resolve(term)))) {\n    term_ = path.basename(term).split('.')[0];\n    if (terms[process.env.TERM]) {\n      term = process.env.TERM;\n    } else if (terms[term_]) {\n      term = term_;\n    } else {\n      term = Object.keys(terms)[0];\n    }\n  } else {\n    paths = Tput.cpaths.slice();\n\n    if (this.termcapFile) {\n      paths.unshift(this.termcapFile);\n    }\n\n    paths.push(Tput.termcap);\n\n    terms = this._tryCap(paths, term);\n  }\n\n  if (!terms) {\n    throw new Error('Cannot find termcap for: ' + term);\n  }\n\n  root = terms[term];\n\n  if (this.debug) {\n    this._termcap = terms;\n  }\n\n  (function tc(term) {\n    if (term && term.strings.tc) {\n      root.inherits = root.inherits || [];\n      root.inherits.push(term.strings.tc);\n\n      var names = terms[term.strings.tc]\n        ? terms[term.strings.tc].names\n        : [term.strings.tc];\n\n      self._debug(\n        '%s inherits from %s.',\n        term.names.join('/'),\n        names.join('/')\n      );\n\n      var inherit = tc(terms[term.strings.tc]);\n      if (inherit) {\n        ['bools', 'numbers', 'strings'].forEach(function (type) {\n          merge(term[type], inherit[type]);\n        });\n      }\n    }\n    return term;\n  })(root);\n\n  // Translate termcap names to terminfo-style names.\n  root = this.translateTermcap(root);\n\n  return root;\n};\n\nTput.prototype._tryCap = function (file, term) {\n  if (!file) return;\n\n  var terms, data, i;\n\n  if (Array.isArray(file)) {\n    for (i = 0; i < file.length; i++) {\n      data = this._tryCap(file[i], term);\n      if (data) return data;\n    }\n    return;\n  }\n\n  // If the termcap string starts with `/`,\n  // ncurses considers it a filename.\n  data = file[0] === '/' ? tryRead(file) : file;\n\n  if (!data) return;\n\n  terms = this.parseTermcap(data, file);\n\n  if (term && !terms[term]) {\n    return;\n  }\n\n  return terms;\n};\n\n/**\n * Termcap Parser\n *  http://en.wikipedia.org/wiki/Termcap\n *  http://www.gnu.org/software\n *    /termutils/manual/termcap-1.3/html_mono/termcap.html\n *  http://www.gnu.org/software\n *    /termutils/manual/termcap-1.3/html_mono/termcap.html#SEC17\n *  http://tldp.org/HOWTO/Text-Terminal-HOWTO.html#toc16\n *  man termcap\n */\n\n// Example:\n// vt102|dec vt102:\\\n//  :do=^J:co#80:li#24:cl=50\\E[;H\\E[2J:\\\n//  :le=^H:bs:cm=5\\E[%i%d;%dH:nd=2\\E[C:up=2\\E[A:\\\n//  :ce=3\\E[K:cd=50\\E[J:so=2\\E[7m:se=2\\E[m:us=2\\E[4m:ue=2\\E[m:\\\n//  :md=2\\E[1m:mr=2\\E[7m:mb=2\\E[5m:me=2\\E[m:is=\\E[1;24r\\E[24;1H:\\\n//  :rs=\\E>\\E[?3l\\E[?4l\\E[?5l\\E[?7h\\E[?8h:ks=\\E[?1h\\E=:ke=\\E[?1l\\E>:\\\n//  :ku=\\EOA:kd=\\EOB:kr=\\EOC:kl=\\EOD:kb=^H:\\\n//  :ho=\\E[H:k1=\\EOP:k2=\\EOQ:k3=\\EOR:k4=\\EOS:pt:sr=5\\EM:vt#3:\\\n//  :sc=\\E7:rc=\\E8:cs=\\E[%i%d;%dr:vs=\\E[?7l:ve=\\E[?7h:\\\n//  :mi:al=\\E[L:dc=\\E[P:dl=\\E[M:ei=\\E[4l:im=\\E[4h:\n\nTput.prototype.parseTermcap = function (data, file) {\n  var terms = {},\n    parts,\n    term,\n    entries,\n    fields,\n    field,\n    names,\n    i,\n    j,\n    k;\n\n  // remove escaped newlines\n  data = data.replace(/\\\\\\n[ \\t]*/g, '');\n\n  // remove comments\n  data = data.replace(/^#[^\\n]+/gm, '');\n\n  // split entries\n  entries = data.trim().split(/\\n+/);\n\n  for (i = 0; i < entries.length; i++) {\n    fields = entries[i].split(/:+/);\n    for (j = 0; j < fields.length; j++) {\n      field = fields[j].trim();\n      if (!field) continue;\n\n      if (j === 0) {\n        names = field.split('|');\n        term = {\n          name: names[0],\n          names: names,\n          desc: names.pop(),\n          file: ~file.indexOf(path.sep) ? path.resolve(file) : file,\n          termcap: true,\n        };\n\n        for (k = 0; k < names.length; k++) {\n          terms[names[k]] = term;\n        }\n\n        term.bools = {};\n        term.numbers = {};\n        term.strings = {};\n\n        continue;\n      }\n\n      if (~field.indexOf('=')) {\n        parts = field.split('=');\n        term.strings[parts[0]] = parts.slice(1).join('=');\n      } else if (~field.indexOf('#')) {\n        parts = field.split('#');\n        term.numbers[parts[0]] = +parts.slice(1).join('#');\n      } else {\n        term.bools[field] = true;\n      }\n    }\n  }\n\n  return terms;\n};\n\n/**\n * Termcap Compiler\n *  man termcap\n */\n\nTput.prototype.translateTermcap = function (info) {\n  var self = this,\n    out = {};\n\n  if (!info) return;\n\n  this._debug(info);\n\n  ['name', 'names', 'desc', 'file', 'termcap'].forEach(function (key) {\n    out[key] = info[key];\n  });\n\n  // Separate aliases for termcap\n  var map = (function () {\n    var out = {};\n\n    Object.keys(Tput.alias).forEach(function (key) {\n      var aliases = Tput.alias[key];\n      out[aliases.termcap] = key;\n    });\n\n    return out;\n  })();\n\n  // Translate termcap cap names to terminfo cap names.\n  // e.g. `up` -> `cursor_up`\n  ['bools', 'numbers', 'strings'].forEach(function (key) {\n    out[key] = {};\n    Object.keys(info[key]).forEach(function (cap) {\n      if (key === 'strings') {\n        info.strings[cap] = self._captoinfo(cap, info.strings[cap], 1);\n      }\n      if (map[cap]) {\n        out[key][map[cap]] = info[key][cap];\n      } else {\n        // NOTE: Possibly include all termcap names\n        // in a separate alias.js file. Some are\n        // missing from the terminfo alias.js file\n        // which is why we have to do this:\n        // See: $ man termcap\n        out[key][cap] = info[key][cap];\n      }\n    });\n  });\n\n  return out;\n};\n\nTput.prototype.compileTermcap = function (term) {\n  return this.compile(this.readTermcap(term));\n};\n\nTput.prototype.injectTermcap = function (term) {\n  return this.inject(this.compileTermcap(term));\n};\n\n/**\n * _nc_captoinfo - ported to javascript directly from ncurses.\n * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc.\n * See: ~/ncurses/ncurses/tinfo/captoinfo.c\n *\n * Convert a termcap string to terminfo format.\n * 'cap' is the relevant terminfo capability index.\n * 's' is the string value of the capability.\n * 'parameterized' tells what type of translations to do:\n *    % translations if 1\n *    pad translations if >=0\n */\n\nTput.prototype._captoinfo = function (cap, s, parameterized) {\n  var self = this;\n\n  var capstart;\n\n  if (parameterized == null) {\n    parameterized = 0;\n  }\n\n  var MAX_PUSHED = 16,\n    stack = [];\n\n  var stackptr = 0,\n    onstack = 0,\n    seenm = 0,\n    seenn = 0,\n    seenr = 0,\n    param = 1,\n    i = 0,\n    out = '';\n\n  function warn() {\n    var args = Array.prototype.slice.call(arguments);\n    args[0] = 'captoinfo: ' + (args[0] || '');\n    return self._debug.apply(self, args);\n  }\n\n  function isdigit(ch) {\n    return ch >= '0' && ch <= '9';\n  }\n\n  function isgraph(ch) {\n    return ch > ' ' && ch <= '~';\n  }\n\n  // convert a character to a terminfo push\n  function cvtchar(sp) {\n    var c = '\\0',\n      len;\n\n    var j = i;\n\n    switch (sp[j]) {\n      case '\\\\':\n        switch (sp[++j]) {\n          case \"'\":\n          case '$':\n          case '\\\\':\n          case '%':\n            c = sp[j];\n            len = 2;\n            break;\n          case '\\0':\n            c = '\\\\';\n            len = 1;\n            break;\n          case '0':\n          case '1':\n          case '2':\n          case '3':\n            len = 1;\n            while (isdigit(sp[j])) {\n              c = String.fromCharCode(\n                8 * c.charCodeAt(0) +\n                  (sp[j++].charCodeAt(0) - '0'.charCodeAt(0))\n              );\n              len++;\n            }\n            break;\n          default:\n            c = sp[j];\n            len = 2;\n            break;\n        }\n        break;\n      case '^':\n        c = String.fromCharCode(sp[++j].charCodeAt(0) & 0x1f);\n        len = 2;\n        break;\n      default:\n        c = sp[j];\n        len = 1;\n    }\n    if (isgraph(c) && c !== ',' && c !== \"'\" && c !== '\\\\' && c !== ':') {\n      out += \"%'\";\n      out += c;\n      out += \"'\";\n    } else {\n      out += '%{';\n      if (c.charCodeAt(0) > 99) {\n        out += String.fromCharCode(\n          ((c.charCodeAt(0) / 100) | 0) + '0'.charCodeAt(0)\n        );\n      }\n      if (c.charCodeAt(0) > 9) {\n        out += String.fromCharCode(\n          (((c.charCodeAt(0) / 10) | 0) % 10) + '0'.charCodeAt(0)\n        );\n      }\n      out += String.fromCharCode((c.charCodeAt(0) % 10) + '0'.charCodeAt(0));\n      out += '}';\n    }\n\n    return len;\n  }\n\n  // push n copies of param on the terminfo stack if not already there\n  function getparm(parm, n) {\n    if (seenr) {\n      if (parm === 1) {\n        parm = 2;\n      } else if (parm === 2) {\n        parm = 1;\n      }\n    }\n\n    if (onstack === parm) {\n      if (n > 1) {\n        warn('string may not be optimal');\n        out += '%Pa';\n        while (n--) {\n          out += '%ga';\n        }\n      }\n      return;\n    }\n\n    if (onstack !== 0) {\n      push();\n    }\n\n    onstack = parm;\n\n    while (n--) {\n      out += '%p';\n      out += String.fromCharCode('0'.charCodeAt(0) + parm);\n    }\n\n    if (seenn && parm < 3) {\n      out += '%{96}%^';\n    }\n\n    if (seenm && parm < 3) {\n      out += '%{127}%^';\n    }\n  }\n\n  // push onstack on to the stack\n  function push() {\n    if (stackptr >= MAX_PUSHED) {\n      warn('string too complex to convert');\n    } else {\n      stack[stackptr++] = onstack;\n    }\n  }\n\n  // pop the top of the stack into onstack\n  function pop() {\n    if (stackptr === 0) {\n      if (onstack === 0) {\n        warn(\"I'm confused\");\n      } else {\n        onstack = 0;\n      }\n    } else {\n      onstack = stack[--stackptr];\n    }\n    param++;\n  }\n\n  function see03() {\n    getparm(param, 1);\n    out += '%3d';\n    pop();\n  }\n\n  function invalid() {\n    out += '%';\n    i--;\n    warn(\n      'unknown %% code %s (%#x) in %s',\n      JSON.stringify(s[i]),\n      s[i].charCodeAt(0),\n      cap\n    );\n  }\n\n  // skip the initial padding (if we haven't been told not to)\n  capstart = null;\n  if (s == null) s = '';\n\n  if (parameterized >= 0 && isdigit(s[i])) {\n    for (capstart = i; ; i++) {\n      if (!(isdigit(s[i]) || s[i] === '*' || s[i] === '.')) {\n        break;\n      }\n    }\n  }\n\n  while (s[i]) {\n    switch (s[i]) {\n      case '%':\n        i++;\n        if (parameterized < 1) {\n          out += '%';\n          break;\n        }\n        switch (s[i++]) {\n          case '%':\n            out += '%';\n            break;\n          case 'r':\n            if (seenr++ === 1) {\n              warn('saw %%r twice in %s', cap);\n            }\n            break;\n          case 'm':\n            if (seenm++ === 1) {\n              warn('saw %%m twice in %s', cap);\n            }\n            break;\n          case 'n':\n            if (seenn++ === 1) {\n              warn('saw %%n twice in %s', cap);\n            }\n            break;\n          case 'i':\n            out += '%i';\n            break;\n          case '6':\n          case 'B':\n            getparm(param, 1);\n            out += '%{10}%/%{16}%*';\n            getparm(param, 1);\n            out += '%{10}%m%+';\n            break;\n          case '8':\n          case 'D':\n            getparm(param, 2);\n            out += '%{2}%*%-';\n            break;\n          case '>':\n            getparm(param, 2);\n            // %?%{x}%>%t%{y}%+%;\n            out += '%?';\n            i += cvtchar(s);\n            out += '%>%t';\n            i += cvtchar(s);\n            out += '%+%;';\n            break;\n          case 'a':\n            if (\n              (s[i] === '=' ||\n                s[i] === '+' ||\n                s[i] === '-' ||\n                s[i] === '*' ||\n                s[i] === '/') &&\n              (s[i + 1] === 'p' || s[i + 1] === 'c') &&\n              s[i + 2] !== '\\0' &&\n              s[i + 2]\n            ) {\n              var l;\n              l = 2;\n              if (s[i] !== '=') {\n                getparm(param, 1);\n              }\n              if (s[i + 1] === 'p') {\n                getparm(param + s[i + 2].charCodeAt(0) - '@'.charCodeAt(0), 1);\n                if (param !== onstack) {\n                  pop();\n                  param--;\n                }\n                l++;\n              } else {\n                (i += 2), (l += cvtchar(s)), (i -= 2);\n              }\n              switch (s[i]) {\n                case '+':\n                  out += '%+';\n                  break;\n                case '-':\n                  out += '%-';\n                  break;\n                case '*':\n                  out += '%*';\n                  break;\n                case '/':\n                  out += '%/';\n                  break;\n                case '=':\n                  if (seenr) {\n                    if (param === 1) {\n                      onstack = 2;\n                    } else if (param === 2) {\n                      onstack = 1;\n                    } else {\n                      onstack = param;\n                    }\n                  } else {\n                    onstack = param;\n                  }\n                  break;\n              }\n              i += l;\n              break;\n            }\n            getparm(param, 1);\n            i += cvtchar(s);\n            out += '%+';\n            break;\n          case '+':\n            getparm(param, 1);\n            i += cvtchar(s);\n            out += '%+%c';\n            pop();\n            break;\n          case 's':\n            // #ifdef WATERLOO\n            //          i += cvtchar(s);\n            //          getparm(param, 1);\n            //          out += '%-';\n            // #else\n            getparm(param, 1);\n            out += '%s';\n            pop();\n            // #endif /* WATERLOO */\n            break;\n          case '-':\n            i += cvtchar(s);\n            getparm(param, 1);\n            out += '%-%c';\n            pop();\n            break;\n          case '.':\n            getparm(param, 1);\n            out += '%c';\n            pop();\n            break;\n          case '0': // not clear any of the historical termcaps did this\n            if (s[i] === '3') {\n              see03(); // goto\n              break;\n            } else if (s[i] !== '2') {\n              invalid(); // goto\n              break;\n            }\n          // FALLTHRU\n          case '2':\n            getparm(param, 1);\n            out += '%2d';\n            pop();\n            break;\n          case '3':\n            see03();\n            break;\n          case 'd':\n            getparm(param, 1);\n            out += '%d';\n            pop();\n            break;\n          case 'f':\n            param++;\n            break;\n          case 'b':\n            param--;\n            break;\n          case '\\\\':\n            out += '%\\\\';\n            break;\n          default:\n            invalid();\n            break;\n        }\n        break;\n      // #ifdef REVISIBILIZE\n      //    case '\\\\':\n      //      out += s[i++];\n      //      out += s[i++];\n      //      break;\n      //    case '\\n':\n      //      out += '\\\\n';\n      //      i++;\n      //      break;\n      //    case '\\t':\n      //      out += '\\\\t';\n      //      i++;\n      //      break;\n      //    case '\\r':\n      //      out += '\\\\r';\n      //      i++;\n      //      break;\n      //    case '\\200':\n      //      out += '\\\\0';\n      //      i++;\n      //      break;\n      //    case '\\f':\n      //      out += '\\\\f';\n      //      i++;\n      //      break;\n      //    case '\\b':\n      //      out += '\\\\b';\n      //      i++;\n      //      break;\n      //    case ' ':\n      //      out += '\\\\s';\n      //      i++;\n      //      break;\n      //    case '^':\n      //      out += '\\\\^';\n      //      i++;\n      //      break;\n      //    case ':':\n      //      out += '\\\\:';\n      //      i++;\n      //      break;\n      //    case ',':\n      //      out += '\\\\,';\n      //      i++;\n      //      break;\n      //    default:\n      //      if (s[i] === '\\033') {\n      //        out += '\\\\E';\n      //        i++;\n      //      } else if (s[i].charCodeAt(0) > 0 && s[i].charCodeAt(0) < 32) {\n      //        out += '^';\n      //        out += String.fromCharCode(s[i].charCodeAt(0) + '@'.charCodeAt(0));\n      //        i++;\n      //      } else if (s[i].charCodeAt(0) <= 0 || s[i].charCodeAt(0) >= 127) {\n      //        out += '\\\\';\n      //        out += String.fromCharCode(\n      //          ((s[i].charCodeAt(0) & 0300) >> 6) + '0'.charCodeAt(0));\n      //        out += String.fromCharCode(\n      //          ((s[i].charCodeAt(0) & 0070) >> 3) + '0'.charCodeAt(0));\n      //        out += String.fromCharCode(\n      //          (s[i].charCodeAt(0) & 0007) + '0'.charCodeAt(0));\n      //        i++;\n      //      } else {\n      //        out += s[i++];\n      //      }\n      //      break;\n      // #else\n      default:\n        out += s[i++];\n        break;\n      // #endif\n    }\n  }\n\n  // Now, if we stripped off some leading padding, add it at the end\n  // of the string as mandatory padding.\n  if (capstart != null) {\n    out += '$<';\n    for (i = capstart; ; i++) {\n      if (isdigit(s[i]) || s[i] === '*' || s[i] === '.') {\n        out += s[i];\n      } else {\n        break;\n      }\n    }\n    out += '/>';\n  }\n\n  if (s !== out) {\n    warn(\n      'Translating %s from %s to %s.',\n      cap,\n      JSON.stringify(s),\n      JSON.stringify(out)\n    );\n  }\n\n  return out;\n};\n\n/**\n * Compile All Terminfo\n */\n\nTput.prototype.getAll = function () {\n  var dir = this._prefix(),\n    list = asort(fs.readdirSync(dir)),\n    infos = [];\n\n  list.forEach(function (letter) {\n    var terms = asort(fs.readdirSync(path.resolve(dir, letter)));\n    infos.push.apply(infos, terms);\n  });\n\n  function asort(obj) {\n    return obj.sort(function (a, b) {\n      a = a.toLowerCase().charCodeAt(0);\n      b = b.toLowerCase().charCodeAt(0);\n      return a - b;\n    });\n  }\n\n  return infos;\n};\n\nTput.prototype.compileAll = function (start) {\n  var self = this,\n    all = {};\n\n  this.getAll().forEach(function (name) {\n    if (start && name !== start) {\n      return;\n    } else {\n      start = null;\n    }\n    all[name] = self.compileTerminfo(name);\n  });\n\n  return all;\n};\n\n/**\n * Detect Features / Quirks\n */\n\nTput.prototype.detectFeatures = function (info) {\n  var data = this.parseACS(info);\n  info.features = {\n    unicode: this.detectUnicode(info),\n    brokenACS: this.detectBrokenACS(info),\n    PCRomSet: this.detectPCRomSet(info),\n    magicCookie: this.detectMagicCookie(info),\n    padding: this.detectPadding(info),\n    setbuf: this.detectSetbuf(info),\n    acsc: data.acsc,\n    acscr: data.acscr,\n  };\n  return info.features;\n};\n\nTput.prototype.detectUnicode = function () {\n  if (process.env.NCURSES_FORCE_UNICODE != null) {\n    return !!+process.env.NCURSES_FORCE_UNICODE;\n  }\n\n  if (this.options.forceUnicode != null) {\n    return this.options.forceUnicode;\n  }\n\n  var LANG =\n    process.env.LANG +\n    ':' +\n    process.env.LANGUAGE +\n    ':' +\n    process.env.LC_ALL +\n    ':' +\n    process.env.LC_CTYPE;\n\n  return /utf-?8/i.test(LANG) || this.GetConsoleCP() === 65001;\n};\n\n// For some reason TERM=linux has smacs/rmacs, but it maps to `^[[11m`\n// and it does not switch to the DEC SCLD character set. What the hell?\n// xterm: \\x1b(0, screen: \\x0e, linux: \\x1b[11m (doesn't work)\n// `man console_codes` says:\n// 11  select null mapping, set display control flag, reset tog‐\n//     gle meta flag (ECMA-48 says \"first alternate font\").\n// See ncurses:\n// ~/ncurses/ncurses/base/lib_set_term.c\n// ~/ncurses/ncurses/tinfo/lib_acs.c\n// ~/ncurses/ncurses/tinfo/tinfo_driver.c\n// ~/ncurses/ncurses/tinfo/lib_setup.c\nTput.prototype.detectBrokenACS = function (info) {\n  // ncurses-compatible env variable.\n  if (process.env.NCURSES_NO_UTF8_ACS != null) {\n    return !!+process.env.NCURSES_NO_UTF8_ACS;\n  }\n\n  // If the terminal supports unicode, we don't need ACS.\n  if (info.numbers.U8 >= 0) {\n    return !!info.numbers.U8;\n  }\n\n  // The linux console is just broken for some reason.\n  // Apparently the Linux console does not support ACS,\n  // but it does support the PC ROM character set.\n  if (info.name === 'linux') {\n    return true;\n  }\n\n  // PC alternate charset\n  // if (acsc.indexOf('+\\x10,\\x11-\\x18.\\x190') === 0) {\n  if (this.detectPCRomSet(info)) {\n    return true;\n  }\n\n  // screen termcap is bugged?\n  if (\n    this.termcap &&\n    info.name.indexOf('screen') === 0 &&\n    process.env.TERMCAP &&\n    ~process.env.TERMCAP.indexOf('screen') &&\n    ~process.env.TERMCAP.indexOf('hhII00')\n  ) {\n    if (\n      ~info.strings.enter_alt_charset_mode.indexOf('\\x0e') ||\n      ~info.strings.enter_alt_charset_mode.indexOf('\\x0f') ||\n      ~info.strings.set_attributes.indexOf('\\x0e') ||\n      ~info.strings.set_attributes.indexOf('\\x0f')\n    ) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\n// If enter_pc_charset is the same as enter_alt_charset,\n// the terminal does not support SCLD as ACS.\n// See: ~/ncurses/ncurses/tinfo/lib_acs.c\nTput.prototype.detectPCRomSet = function (info) {\n  var s = info.strings;\n  if (\n    s.enter_pc_charset_mode &&\n    s.enter_alt_charset_mode &&\n    s.enter_pc_charset_mode === s.enter_alt_charset_mode &&\n    s.exit_pc_charset_mode === s.exit_alt_charset_mode\n  ) {\n    return true;\n  }\n  return false;\n};\n\nTput.prototype.detectMagicCookie = function () {\n  return process.env.NCURSES_NO_MAGIC_COOKIE == null;\n};\n\nTput.prototype.detectPadding = function () {\n  return process.env.NCURSES_NO_PADDING == null;\n};\n\nTput.prototype.detectSetbuf = function () {\n  return process.env.NCURSES_NO_SETBUF == null;\n};\n\nTput.prototype.parseACS = function (info) {\n  var data = {};\n\n  data.acsc = {};\n  data.acscr = {};\n\n  // Possibly just return an empty object, as done here, instead of\n  // specifically saying ACS is \"broken\" above. This would be more\n  // accurate to ncurses logic. But it doesn't really matter.\n  if (this.detectPCRomSet(info)) {\n    return data;\n  }\n\n  // See: ~/ncurses/ncurses/tinfo/lib_acs.c: L208\n  Object.keys(Tput.acsc).forEach(function (ch) {\n    var acs_chars = info.strings.acs_chars || '',\n      i = acs_chars.indexOf(ch),\n      next = acs_chars[i + 1];\n\n    if (!next || i === -1 || !Tput.acsc[next]) {\n      return;\n    }\n\n    data.acsc[ch] = Tput.acsc[next];\n    data.acscr[Tput.acsc[next]] = ch;\n  });\n\n  return data;\n};\n\nTput.prototype.GetConsoleCP = function () {\n  var ccp;\n\n  if (process.platform !== 'win32') {\n    return -1;\n  }\n\n  // Allow unicode on all windows consoles for now:\n  if (+process.env.NCURSES_NO_WINDOWS_UNICODE !== 1) {\n    return 65001;\n  }\n\n  // cp.execSync('chcp 65001', { stdio: 'ignore', timeout: 1500 });\n\n  try {\n    // Produces something like: 'Active code page: 437\\n\\n'\n    ccp = cp.execFileSync(process.env.WINDIR + '\\\\system32\\\\chcp.com', [], {\n      stdio: ['ignore', 'pipe', 'ignore'],\n      encoding: 'ascii',\n      timeout: 1500,\n    });\n    // ccp = cp.execSync('chcp', {\n    //   stdio: ['ignore', 'pipe', 'ignore'],\n    //   encoding: 'ascii',\n    //   timeout: 1500\n    // });\n  } catch (e) {}\n\n  ccp = /\\d+/.exec(ccp);\n\n  if (!ccp) {\n    return -1;\n  }\n\n  ccp = +ccp[0];\n\n  return ccp;\n};\n\n/**\n * Helpers\n */\n\nfunction noop() {\n  return '';\n}\n\nnoop.unsupported = true;\n\nfunction merge(a, b) {\n  Object.keys(b).forEach(function (key) {\n    a[key] = b[key];\n  });\n  return a;\n}\n\nfunction write(data) {\n  return process.stdout.write(data);\n}\n\nfunction tryRead(file) {\n  if (Array.isArray(file)) {\n    for (var i = 0; i < file.length; i++) {\n      var data = tryRead(file[i]);\n      if (data) return data;\n    }\n    return '';\n  }\n  if (!file) return '';\n  file = path.resolve.apply(path, arguments);\n  try {\n    return fs.readFileSync(file, 'utf8');\n  } catch (e) {\n    return '';\n  }\n}\n\n/**\n * sprintf\n *  http://www.cplusplus.com/reference/cstdio/printf/\n */\n\nfunction sprintf(src) {\n  var params = Array.prototype.slice.call(arguments, 1),\n    rule = /%([\\-+# ]{1,4})?(\\d+(?:\\.\\d+)?)?([doxXsc])/g,\n    i = 0;\n\n  return src.replace(rule, function (_, flag, width, type) {\n    var flags = (flag || '').split(''),\n      param = params[i] != null ? params[i] : '',\n      initial = param,\n      // , width = +width\n      opt = {},\n      pre = '';\n\n    i++;\n\n    switch (type) {\n      case 'd': // signed int\n        param = (+param).toString(10);\n        break;\n      case 'o': // unsigned octal\n        param = (+param).toString(8);\n        break;\n      case 'x': // unsigned hex int\n        param = (+param).toString(16);\n        break;\n      case 'X': // unsigned hex int uppercase\n        param = (+param).toString(16).toUppercase();\n        break;\n      case 's': // string\n        break;\n      case 'c': // char\n        param = isFinite(param) ? String.fromCharCode(param || 0x80) : '';\n        break;\n    }\n\n    flags.forEach(function (flag) {\n      switch (flag) {\n        // left-justify by width\n        case '-':\n          opt.left = true;\n          break;\n        // always precede numbers with their signs\n        case '+':\n          opt.signs = true;\n          break;\n        // used with o, x, X - value is preceded with 0, 0x, or 0X respectively.\n        // used with a, A, e, E, f, F, g, G - forces written output to contain\n        // a decimal point even if no more digits follow\n        case '#':\n          opt.hexpoint = true;\n          break;\n        // if no sign is going to be written, black space in front of the value\n        case ' ':\n          opt.space = true;\n          break;\n      }\n    });\n\n    width = +width.split('.')[0];\n\n    // Should this be for opt.left too?\n    // Example: %2.2X - turns 0 into 00\n    if (width && !opt.left) {\n      param = param + '';\n      while (param.length < width) {\n        param = '0' + param;\n      }\n    }\n\n    if (opt.signs) {\n      if (+initial >= 0) {\n        pre += '+';\n      }\n    }\n\n    if (opt.space) {\n      if (!opt.signs && +initial >= 0) {\n        pre += ' ';\n      }\n    }\n\n    if (opt.hexpoint) {\n      switch (type) {\n        case 'o': // unsigned octal\n          pre += '0';\n          break;\n        case 'x': // unsigned hex int\n          pre += '0x';\n          break;\n        case 'X': // unsigned hex int uppercase\n          pre += '0X';\n          break;\n      }\n    }\n\n    if (opt.left) {\n      if (width > pre.length + param.length) {\n        width -= pre.length + param.length;\n        pre = Array(width + 1).join(' ') + pre;\n      }\n    }\n\n    return pre + param;\n  });\n}\n\n/**\n * Aliases\n */\n\nTput._alias = alias;\n\nTput.alias = {};\n\n['bools', 'numbers', 'strings'].forEach(function (type) {\n  Object.keys(Tput._alias[type]).forEach(function (key) {\n    var aliases = Tput._alias[type][key];\n    Tput.alias[key] = [aliases[0]];\n    Tput.alias[key].terminfo = aliases[0];\n    Tput.alias[key].termcap = aliases[1];\n  });\n});\n\n// Bools\nTput.alias.no_esc_ctlc.push('beehive_glitch');\nTput.alias.dest_tabs_magic_smso.push('teleray_glitch');\n\n// Numbers\nTput.alias.micro_col_size.push('micro_char_size');\n\n/**\n * Feature Checking\n */\n\nTput.aliasMap = {};\n\nObject.keys(Tput.alias).forEach(function (key) {\n  Tput.aliasMap[key] = key;\n  Tput.alias[key].forEach(function (k) {\n    Tput.aliasMap[k] = key;\n  });\n});\n\nTput.prototype.has = function (name) {\n  name = Tput.aliasMap[name];\n\n  var val = this.all[name];\n\n  if (!name) return false;\n\n  if (typeof val === 'number') {\n    return val !== -1;\n  }\n\n  return !!val;\n};\n\n/**\n * Fallback Termcap Entry\n */\n\nTput.termcap =\n  '' +\n  'vt102|dec vt102:' +\n  ':do=^J:co#80:li#24:cl=50\\\\E[;H\\\\E[2J:' +\n  ':le=^H:bs:cm=5\\\\E[%i%d;%dH:nd=2\\\\E[C:up=2\\\\E[A:' +\n  ':ce=3\\\\E[K:cd=50\\\\E[J:so=2\\\\E[7m:se=2\\\\E[m:us=2\\\\E[4m:ue=2\\\\E[m:' +\n  ':md=2\\\\E[1m:mr=2\\\\E[7m:mb=2\\\\E[5m:me=2\\\\E[m:is=\\\\E[1;24r\\\\E[24;1H:' +\n  ':rs=\\\\E>\\\\E[?3l\\\\E[?4l\\\\E[?5l\\\\E[?7h\\\\E[?8h:ks=\\\\E[?1h\\\\E=:ke=\\\\E[?1l\\\\E>:' +\n  ':ku=\\\\EOA:kd=\\\\EOB:kr=\\\\EOC:kl=\\\\EOD:kb=^H:\\\\\\n' +\n  ':ho=\\\\E[H:k1=\\\\EOP:k2=\\\\EOQ:k3=\\\\EOR:k4=\\\\EOS:pt:sr=5\\\\EM:vt#3:' +\n  ':sc=\\\\E7:rc=\\\\E8:cs=\\\\E[%i%d;%dr:vs=\\\\E[?7l:ve=\\\\E[?7h:' +\n  ':mi:al=\\\\E[L:dc=\\\\E[P:dl=\\\\E[M:ei=\\\\E[4l:im=\\\\E[4h:';\n\n/**\n * Terminfo Data\n */\n\nTput.bools = [\n  'auto_left_margin',\n  'auto_right_margin',\n  'no_esc_ctlc',\n  'ceol_standout_glitch',\n  'eat_newline_glitch',\n  'erase_overstrike',\n  'generic_type',\n  'hard_copy',\n  'has_meta_key',\n  'has_status_line',\n  'insert_null_glitch',\n  'memory_above',\n  'memory_below',\n  'move_insert_mode',\n  'move_standout_mode',\n  'over_strike',\n  'status_line_esc_ok',\n  'dest_tabs_magic_smso',\n  'tilde_glitch',\n  'transparent_underline',\n  'xon_xoff',\n  'needs_xon_xoff',\n  'prtr_silent',\n  'hard_cursor',\n  'non_rev_rmcup',\n  'no_pad_char',\n  'non_dest_scroll_region',\n  'can_change',\n  'back_color_erase',\n  'hue_lightness_saturation',\n  'col_addr_glitch',\n  'cr_cancels_micro_mode',\n  'has_print_wheel',\n  'row_addr_glitch',\n  'semi_auto_right_margin',\n  'cpi_changes_res',\n  'lpi_changes_res',\n\n  // #ifdef __INTERNAL_CAPS_VISIBLE\n  'backspaces_with_bs',\n  'crt_no_scrolling',\n  'no_correctly_working_cr',\n  'gnu_has_meta_key',\n  'linefeed_is_newline',\n  'has_hardware_tabs',\n  'return_does_clr_eol',\n];\n\nTput.numbers = [\n  'columns',\n  'init_tabs',\n  'lines',\n  'lines_of_memory',\n  'magic_cookie_glitch',\n  'padding_baud_rate',\n  'virtual_terminal',\n  'width_status_line',\n  'num_labels',\n  'label_height',\n  'label_width',\n  'max_attributes',\n  'maximum_windows',\n  'max_colors',\n  'max_pairs',\n  'no_color_video',\n  'buffer_capacity',\n  'dot_vert_spacing',\n  'dot_horz_spacing',\n  'max_micro_address',\n  'max_micro_jump',\n  'micro_col_size',\n  'micro_line_size',\n  'number_of_pins',\n  'output_res_char',\n  'output_res_line',\n  'output_res_horz_inch',\n  'output_res_vert_inch',\n  'print_rate',\n  'wide_char_size',\n  'buttons',\n  'bit_image_entwining',\n  'bit_image_type',\n\n  // #ifdef __INTERNAL_CAPS_VISIBLE\n  'magic_cookie_glitch_ul',\n  'carriage_return_delay',\n  'new_line_delay',\n  'backspace_delay',\n  'horizontal_tab_delay',\n  'number_of_function_keys',\n];\n\nTput.strings = [\n  'back_tab',\n  'bell',\n  'carriage_return',\n  'change_scroll_region',\n  'clear_all_tabs',\n  'clear_screen',\n  'clr_eol',\n  'clr_eos',\n  'column_address',\n  'command_character',\n  'cursor_address',\n  'cursor_down',\n  'cursor_home',\n  'cursor_invisible',\n  'cursor_left',\n  'cursor_mem_address',\n  'cursor_normal',\n  'cursor_right',\n  'cursor_to_ll',\n  'cursor_up',\n  'cursor_visible',\n  'delete_character',\n  'delete_line',\n  'dis_status_line',\n  'down_half_line',\n  'enter_alt_charset_mode',\n  'enter_blink_mode',\n  'enter_bold_mode',\n  'enter_ca_mode',\n  'enter_delete_mode',\n  'enter_dim_mode',\n  'enter_insert_mode',\n  'enter_secure_mode',\n  'enter_protected_mode',\n  'enter_reverse_mode',\n  'enter_standout_mode',\n  'enter_underline_mode',\n  'erase_chars',\n  'exit_alt_charset_mode',\n  'exit_attribute_mode',\n  'exit_ca_mode',\n  'exit_delete_mode',\n  'exit_insert_mode',\n  'exit_standout_mode',\n  'exit_underline_mode',\n  'flash_screen',\n  'form_feed',\n  'from_status_line',\n  'init_1string',\n  'init_2string',\n  'init_3string',\n  'init_file',\n  'insert_character',\n  'insert_line',\n  'insert_padding',\n  'key_backspace',\n  'key_catab',\n  'key_clear',\n  'key_ctab',\n  'key_dc',\n  'key_dl',\n  'key_down',\n  'key_eic',\n  'key_eol',\n  'key_eos',\n  'key_f0',\n  'key_f1',\n  'key_f10',\n  'key_f2',\n  'key_f3',\n  'key_f4',\n  'key_f5',\n  'key_f6',\n  'key_f7',\n  'key_f8',\n  'key_f9',\n  'key_home',\n  'key_ic',\n  'key_il',\n  'key_left',\n  'key_ll',\n  'key_npage',\n  'key_ppage',\n  'key_right',\n  'key_sf',\n  'key_sr',\n  'key_stab',\n  'key_up',\n  'keypad_local',\n  'keypad_xmit',\n  'lab_f0',\n  'lab_f1',\n  'lab_f10',\n  'lab_f2',\n  'lab_f3',\n  'lab_f4',\n  'lab_f5',\n  'lab_f6',\n  'lab_f7',\n  'lab_f8',\n  'lab_f9',\n  'meta_off',\n  'meta_on',\n  'newline',\n  'pad_char',\n  'parm_dch',\n  'parm_delete_line',\n  'parm_down_cursor',\n  'parm_ich',\n  'parm_index',\n  'parm_insert_line',\n  'parm_left_cursor',\n  'parm_right_cursor',\n  'parm_rindex',\n  'parm_up_cursor',\n  'pkey_key',\n  'pkey_local',\n  'pkey_xmit',\n  'print_screen',\n  'prtr_off',\n  'prtr_on',\n  'repeat_char',\n  'reset_1string',\n  'reset_2string',\n  'reset_3string',\n  'reset_file',\n  'restore_cursor',\n  'row_address',\n  'save_cursor',\n  'scroll_forward',\n  'scroll_reverse',\n  'set_attributes',\n  'set_tab',\n  'set_window',\n  'tab',\n  'to_status_line',\n  'underline_char',\n  'up_half_line',\n  'init_prog',\n  'key_a1',\n  'key_a3',\n  'key_b2',\n  'key_c1',\n  'key_c3',\n  'prtr_non',\n  'char_padding',\n  'acs_chars',\n  'plab_norm',\n  'key_btab',\n  'enter_xon_mode',\n  'exit_xon_mode',\n  'enter_am_mode',\n  'exit_am_mode',\n  'xon_character',\n  'xoff_character',\n  'ena_acs',\n  'label_on',\n  'label_off',\n  'key_beg',\n  'key_cancel',\n  'key_close',\n  'key_command',\n  'key_copy',\n  'key_create',\n  'key_end',\n  'key_enter',\n  'key_exit',\n  'key_find',\n  'key_help',\n  'key_mark',\n  'key_message',\n  'key_move',\n  'key_next',\n  'key_open',\n  'key_options',\n  'key_previous',\n  'key_print',\n  'key_redo',\n  'key_reference',\n  'key_refresh',\n  'key_replace',\n  'key_restart',\n  'key_resume',\n  'key_save',\n  'key_suspend',\n  'key_undo',\n  'key_sbeg',\n  'key_scancel',\n  'key_scommand',\n  'key_scopy',\n  'key_screate',\n  'key_sdc',\n  'key_sdl',\n  'key_select',\n  'key_send',\n  'key_seol',\n  'key_sexit',\n  'key_sfind',\n  'key_shelp',\n  'key_shome',\n  'key_sic',\n  'key_sleft',\n  'key_smessage',\n  'key_smove',\n  'key_snext',\n  'key_soptions',\n  'key_sprevious',\n  'key_sprint',\n  'key_sredo',\n  'key_sreplace',\n  'key_sright',\n  'key_srsume',\n  'key_ssave',\n  'key_ssuspend',\n  'key_sundo',\n  'req_for_input',\n  'key_f11',\n  'key_f12',\n  'key_f13',\n  'key_f14',\n  'key_f15',\n  'key_f16',\n  'key_f17',\n  'key_f18',\n  'key_f19',\n  'key_f20',\n  'key_f21',\n  'key_f22',\n  'key_f23',\n  'key_f24',\n  'key_f25',\n  'key_f26',\n  'key_f27',\n  'key_f28',\n  'key_f29',\n  'key_f30',\n  'key_f31',\n  'key_f32',\n  'key_f33',\n  'key_f34',\n  'key_f35',\n  'key_f36',\n  'key_f37',\n  'key_f38',\n  'key_f39',\n  'key_f40',\n  'key_f41',\n  'key_f42',\n  'key_f43',\n  'key_f44',\n  'key_f45',\n  'key_f46',\n  'key_f47',\n  'key_f48',\n  'key_f49',\n  'key_f50',\n  'key_f51',\n  'key_f52',\n  'key_f53',\n  'key_f54',\n  'key_f55',\n  'key_f56',\n  'key_f57',\n  'key_f58',\n  'key_f59',\n  'key_f60',\n  'key_f61',\n  'key_f62',\n  'key_f63',\n  'clr_bol',\n  'clear_margins',\n  'set_left_margin',\n  'set_right_margin',\n  'label_format',\n  'set_clock',\n  'display_clock',\n  'remove_clock',\n  'create_window',\n  'goto_window',\n  'hangup',\n  'dial_phone',\n  'quick_dial',\n  'tone',\n  'pulse',\n  'flash_hook',\n  'fixed_pause',\n  'wait_tone',\n  'user0',\n  'user1',\n  'user2',\n  'user3',\n  'user4',\n  'user5',\n  'user6',\n  'user7',\n  'user8',\n  'user9',\n  'orig_pair',\n  'orig_colors',\n  'initialize_color',\n  'initialize_pair',\n  'set_color_pair',\n  'set_foreground',\n  'set_background',\n  'change_char_pitch',\n  'change_line_pitch',\n  'change_res_horz',\n  'change_res_vert',\n  'define_char',\n  'enter_doublewide_mode',\n  'enter_draft_quality',\n  'enter_italics_mode',\n  'enter_leftward_mode',\n  'enter_micro_mode',\n  'enter_near_letter_quality',\n  'enter_normal_quality',\n  'enter_shadow_mode',\n  'enter_subscript_mode',\n  'enter_superscript_mode',\n  'enter_upward_mode',\n  'exit_doublewide_mode',\n  'exit_italics_mode',\n  'exit_leftward_mode',\n  'exit_micro_mode',\n  'exit_shadow_mode',\n  'exit_subscript_mode',\n  'exit_superscript_mode',\n  'exit_upward_mode',\n  'micro_column_address',\n  'micro_down',\n  'micro_left',\n  'micro_right',\n  'micro_row_address',\n  'micro_up',\n  'order_of_pins',\n  'parm_down_micro',\n  'parm_left_micro',\n  'parm_right_micro',\n  'parm_up_micro',\n  'select_char_set',\n  'set_bottom_margin',\n  'set_bottom_margin_parm',\n  'set_left_margin_parm',\n  'set_right_margin_parm',\n  'set_top_margin',\n  'set_top_margin_parm',\n  'start_bit_image',\n  'start_char_set_def',\n  'stop_bit_image',\n  'stop_char_set_def',\n  'subscript_characters',\n  'superscript_characters',\n  'these_cause_cr',\n  'zero_motion',\n  'char_set_names',\n  'key_mouse',\n  'mouse_info',\n  'req_mouse_pos',\n  'get_mouse',\n  'set_a_foreground',\n  'set_a_background',\n  'pkey_plab',\n  'device_type',\n  'code_set_init',\n  'set0_des_seq',\n  'set1_des_seq',\n  'set2_des_seq',\n  'set3_des_seq',\n  'set_lr_margin',\n  'set_tb_margin',\n  'bit_image_repeat',\n  'bit_image_newline',\n  'bit_image_carriage_return',\n  'color_names',\n  'define_bit_image_region',\n  'end_bit_image_region',\n  'set_color_band',\n  'set_page_length',\n  'display_pc_char',\n  'enter_pc_charset_mode',\n  'exit_pc_charset_mode',\n  'enter_scancode_mode',\n  'exit_scancode_mode',\n  'pc_term_options',\n  'scancode_escape',\n  'alt_scancode_esc',\n  'enter_horizontal_hl_mode',\n  'enter_left_hl_mode',\n  'enter_low_hl_mode',\n  'enter_right_hl_mode',\n  'enter_top_hl_mode',\n  'enter_vertical_hl_mode',\n  'set_a_attributes',\n  'set_pglen_inch',\n\n  // #ifdef __INTERNAL_CAPS_VISIBLE\n  'termcap_init2',\n  'termcap_reset',\n  'linefeed_if_not_lf',\n  'backspace_if_not_bs',\n  'other_non_function_keys',\n  'arrow_key_map',\n  'acs_ulcorner',\n  'acs_llcorner',\n  'acs_urcorner',\n  'acs_lrcorner',\n  'acs_ltee',\n  'acs_rtee',\n  'acs_btee',\n  'acs_ttee',\n  'acs_hline',\n  'acs_vline',\n  'acs_plus',\n  'memory_lock',\n  'memory_unlock',\n  'box_chars_1',\n];\n\n// DEC Special Character and Line Drawing Set.\n// Taken from tty.js.\nTput.acsc = {\n  // (0\n  '`': '\\u25c6', // '◆'\n  a: '\\u2592', // '▒'\n  b: '\\u0009', // '\\t'\n  c: '\\u000c', // '\\f'\n  d: '\\u000d', // '\\r'\n  e: '\\u000a', // '\\n'\n  f: '\\u00b0', // '°'\n  g: '\\u00b1', // '±'\n  h: '\\u2424', // '\\u2424' (NL)\n  i: '\\u000b', // '\\v'\n  j: '\\u2518', // '┘'\n  k: '\\u2510', // '┐'\n  l: '\\u250c', // '┌'\n  m: '\\u2514', // '└'\n  n: '\\u253c', // '┼'\n  o: '\\u23ba', // '⎺'\n  p: '\\u23bb', // '⎻'\n  q: '\\u2500', // '─'\n  r: '\\u23bc', // '⎼'\n  s: '\\u23bd', // '⎽'\n  t: '\\u251c', // '├'\n  u: '\\u2524', // '┤'\n  v: '\\u2534', // '┴'\n  w: '\\u252c', // '┬'\n  x: '\\u2502', // '│'\n  y: '\\u2264', // '≤'\n  z: '\\u2265', // '≥'\n  '{': '\\u03c0', // 'π'\n  '|': '\\u2260', // '≠'\n  '}': '\\u00a3', // '£'\n  '~': '\\u00b7', // '·'\n};\n\n// Convert ACS unicode characters to the\n// most similar-looking ascii characters.\nTput.utoa = Tput.prototype.utoa = {\n  '\\u25c6': '*', // '◆'\n  '\\u2592': ' ', // '▒'\n  // '\\u0009': '\\t', // '\\t'\n  // '\\u000c': '\\f', // '\\f'\n  // '\\u000d': '\\r', // '\\r'\n  // '\\u000a': '\\n', // '\\n'\n  '\\u00b0': '*', // '°'\n  '\\u00b1': '+', // '±'\n  '\\u2424': '\\n', // '\\u2424' (NL)\n  // '\\u000b': '\\v', // '\\v'\n  '\\u2518': '+', // '┘'\n  '\\u2510': '+', // '┐'\n  '\\u250c': '+', // '┌'\n  '\\u2514': '+', // '└'\n  '\\u253c': '+', // '┼'\n  '\\u23ba': '-', // '⎺'\n  '\\u23bb': '-', // '⎻'\n  '\\u2500': '-', // '─'\n  '\\u23bc': '-', // '⎼'\n  '\\u23bd': '_', // '⎽'\n  '\\u251c': '+', // '├'\n  '\\u2524': '+', // '┤'\n  '\\u2534': '+', // '┴'\n  '\\u252c': '+', // '┬'\n  '\\u2502': '|', // '│'\n  '\\u2264': '<', // '≤'\n  '\\u2265': '>', // '≥'\n  '\\u03c0': '?', // 'π'\n  '\\u2260': '=', // '≠'\n  '\\u00a3': '?', // '£'\n  '\\u00b7': '*', // '·'\n};\n\n/**\n * Expose\n */\n\nexport default Tput;\nexport { sprintf, tryRead };\n","/**\n * colors.js - color-related functions for blessed.\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\ninterface RGB {\n  0: number;\n  1: number;\n  2: number;\n}\n\ntype ColorInput = string | number[] | RGB;\n\ninterface ColorModule {\n  match(r1: number | string | number[], g1?: number, b1?: number): number;\n  RGBToHex(r: number | number[], g?: number, b?: number): string;\n  hexToRGB(hex: string): number[];\n  mixColors(c1: number, c2: number, alpha?: number): number;\n  blend(attr: number, attr2?: number | null, alpha?: number): number;\n  reduce(color: number, total: number): number;\n  convert(color: ColorInput): number;\n  _cache: { [key: number]: number };\n  xterm: string[];\n  colors: string[];\n  vcolors: number[][];\n  colorNames: { [key: string]: number };\n  ccolors: { [key: string]: any };\n  ncolors: string[];\n}\n\nexport function match(\n  r1: number | string | number[],\n  g1?: number,\n  b1?: number\n): number {\n  if (typeof r1 === 'string') {\n    var hex = r1;\n    if (hex[0] !== '#') {\n      return -1;\n    }\n    const hexRgb = hexToRGB(hex);\n    r1 = hexRgb[0];\n    g1 = hexRgb[1];\n    b1 = hexRgb[2];\n  } else if (Array.isArray(r1)) {\n    b1 = r1[2];\n    g1 = r1[1];\n    r1 = r1[0];\n  }\n\n  var hash = ((r1 as number) << 16) | ((g1 as number) << 8) | (b1 as number);\n\n  if (_cache[hash] != null) {\n    return _cache[hash];\n  }\n\n  var ldiff = Infinity,\n    li = -1,\n    i = 0,\n    c,\n    r2,\n    g2,\n    b2,\n    diff;\n\n  for (; i < vcolors.length; i++) {\n    c = vcolors[i];\n    r2 = c[0];\n    g2 = c[1];\n    b2 = c[2];\n\n    diff = colorDistance(r1 as number, g1 as number, b1 as number, r2, g2, b2);\n\n    if (diff === 0) {\n      li = i;\n      break;\n    }\n\n    if (diff < ldiff) {\n      ldiff = diff;\n      li = i;\n    }\n  }\n\n  _cache[hash] = li;\n  return _cache[hash];\n}\n\nexport function RGBToHex(r: number | number[], g?: number, b?: number): string {\n  if (Array.isArray(r)) {\n    b = r[2];\n    g = r[1];\n    r = r[0];\n  }\n\n  function hex(n: number): string {\n    let hexStr = n.toString(16);\n    if (hexStr.length < 2) hexStr = '0' + hexStr;\n    return hexStr;\n  }\n\n  return '#' + hex(r) + hex(g) + hex(b);\n}\n\nexport function hexToRGB(hex: string): number[] {\n  if (hex.length === 4) {\n    hex = hex[0] + hex[1] + hex[1] + hex[2] + hex[2] + hex[3] + hex[3];\n  }\n\n  var col = parseInt(hex.substring(1), 16),\n    r = (col >> 16) & 0xff,\n    g = (col >> 8) & 0xff,\n    b = col & 0xff;\n\n  return [r, g, b];\n}\n\n// As it happens, comparing how similar two colors are is really hard. Here is\n// one of the simplest solutions, which doesn't require conversion to another\n// color space, posted on stackoverflow[1]. Maybe someone better at math can\n// propose a superior solution.\n// [1] http://stackoverflow.com/questions/1633828\n\nexport function colorDistance(\n  r1: number,\n  g1: number,\n  b1: number,\n  r2: number,\n  g2: number,\n  b2: number\n): number {\n  return (\n    Math.pow(30 * (r1 - r2), 2) +\n    Math.pow(59 * (g1 - g2), 2) +\n    Math.pow(11 * (b1 - b2), 2)\n  );\n}\n\n// This might work well enough for a terminal's colors: treat RGB as XYZ in a\n// 3-dimensional space and go midway between the two points.\nexport function mixColors(\n  c1: number,\n  c2: number,\n  alpha?: number | null\n): number {\n  // Handle new default color marker\n  if (c1 === 0xffffff) c1 = 0;\n  if (c2 === 0xffffff) c2 = 0;\n  if (alpha === null) alpha = 0.5;\n\n  const c1Color = vcolors[c1];\n  var r1 = c1Color[0];\n  var g1 = c1Color[1];\n  var b1 = c1Color[2];\n\n  const c2Color = vcolors[c2];\n  var r2 = c2Color[0];\n  var g2 = c2Color[1];\n  var b2 = c2Color[2];\n\n  r1 += ((r2 - r1) * alpha) | 0;\n  g1 += ((g2 - g1) * alpha) | 0;\n  b1 += ((b2 - b1) * alpha) | 0;\n\n  return match([r1, g1, b1]);\n}\n\nexport function blend(\n  attr: number,\n  attr2?: number | null,\n  alpha?: number\n): number {\n  var name, i, c, nc;\n\n  // Extract colors from new format\n  var bg = attr & 0xffffff;\n  var fg = Math.floor(attr / 0x1000000) & 0xffffff;\n  var flags = Math.floor(attr / 0x1000000000000);\n\n  if (attr2 !== null) {\n    var bg2 = attr2 & 0xffffff;\n    var fg2 = Math.floor(attr2 / 0x1000000) & 0xffffff;\n\n    // Handle default colors\n    if (bg === 0xffffff) bg = 0;\n    if (bg2 === 0xffffff) bg2 = 0;\n    if (fg === 0xffffff) fg = 7;\n    if (fg2 === 0xffffff) fg2 = 7;\n\n    // For RGB colors (> 255), convert to palette for blending\n    if (bg > 255) bg = match([(bg >> 16) & 0xff, (bg >> 8) & 0xff, bg & 0xff]);\n    if (bg2 > 255)\n      bg2 = match([(bg2 >> 16) & 0xff, (bg2 >> 8) & 0xff, bg2 & 0xff]);\n    if (fg > 255) fg = match([(fg >> 16) & 0xff, (fg >> 8) & 0xff, fg & 0xff]);\n    if (fg2 > 255)\n      fg2 = match([(fg2 >> 16) & 0xff, (fg2 >> 8) & 0xff, fg2 & 0xff]);\n\n    bg = mixColors(bg, bg2, alpha);\n    fg = mixColors(fg, fg2, alpha);\n  } else {\n    // Handle single color processing\n    if (bg === 0xffffff) bg = 0;\n    if (fg === 0xffffff) fg = 7;\n\n    // For RGB colors, convert to palette\n    if (bg > 255) bg = match([(bg >> 16) & 0xff, (bg >> 8) & 0xff, bg & 0xff]);\n    if (fg > 255) fg = match([(fg >> 16) & 0xff, (fg >> 8) & 0xff, fg & 0xff]);\n\n    // Apply cache and brightness adjustments for palette colors\n    if (bg <= 255) {\n      if ((blend as any)._cache[bg] !== null) {\n        bg = (blend as any)._cache[bg];\n      } else if (bg >= 8 && bg <= 15) {\n        bg -= 8;\n      } else {\n        name = ncolors[bg];\n        if (name) {\n          for (i = 0; i < ncolors.length; i++) {\n            if (name === ncolors[i] && i !== bg) {\n              c = vcolors[bg];\n              nc = vcolors[i];\n              if (nc[0] + nc[1] + nc[2] < c[0] + c[1] + c[2]) {\n                (blend as any)._cache[bg] = i;\n                bg = i;\n                break;\n              }\n            }\n          }\n        }\n      }\n    }\n\n    if (fg <= 255) {\n      if ((blend as any)._cache[fg] !== null) {\n        fg = (blend as any)._cache[fg];\n      } else if (fg >= 8 && fg <= 15) {\n        fg -= 8;\n      } else {\n        name = ncolors[fg];\n        if (name) {\n          for (i = 0; i < ncolors.length; i++) {\n            if (name === ncolors[i] && i !== fg) {\n              c = vcolors[fg];\n              nc = vcolors[i];\n              if (nc[0] + nc[1] + nc[2] < c[0] + c[1] + c[2]) {\n                (blend as any)._cache[fg] = i;\n                fg = i;\n                break;\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n\n  // Pack back into new format\n  return bg + fg * 0x1000000 + flags * 0x1000000000000;\n}\n\nblend._cache = {};\n\nexport const _cache = {};\n\nexport function reduce(color: number, total: number): number {\n  if (color >= 16 && total <= 16) {\n    color = ccolors[color];\n  } else if (color >= 8 && total <= 8) {\n    color -= 8;\n  } else if (color >= 2 && total <= 2) {\n    color %= 2;\n  }\n  return color;\n}\n\n// XTerm Colors\n// These were actually tough to track down. The xterm source only uses color\n// keywords. The X11 source needed to be examined to find the actual values.\n// They then had to be mapped to rgb values and then converted to hex values.\nexport const xterm = [\n  '#000000', // black\n  '#cd0000', // red3\n  '#00cd00', // green3\n  '#cdcd00', // yellow3\n  '#0000ee', // blue2\n  '#cd00cd', // magenta3\n  '#00cdcd', // cyan3\n  '#e5e5e5', // gray90\n  '#7f7f7f', // gray50\n  '#ff0000', // red\n  '#00ff00', // green\n  '#ffff00', // yellow\n  '#5c5cff', // rgb:5c/5c/ff\n  '#ff00ff', // magenta\n  '#00ffff', // cyan\n  '#ffffff', // white\n];\n\n// Seed all 256 colors. Assume xterm defaults.\n// Ported from the xterm color generation script.\nexport const vcolors = [] as number[][];\n\nexport const colors = (function () {\n  var cols = [] as string[],\n    _cols = vcolors,\n    r: number,\n    g: number,\n    b: number,\n    i: number,\n    l: number;\n\n  function hex(n: number): string {\n    let hexStr = n.toString(16);\n    if (hexStr.length < 2) hexStr = '0' + hexStr;\n    return hexStr;\n  }\n\n  function push(i: number, r: number, g: number, b: number): void {\n    cols[i] = '#' + hex(r) + hex(g) + hex(b);\n    _cols[i] = [r, g, b];\n  }\n\n  // 0 - 15\n  xterm.forEach(function (c, i) {\n    const cValue = parseInt(c.substring(1), 16);\n    push(i, (cValue >> 16) & 0xff, (cValue >> 8) & 0xff, cValue & 0xff);\n  });\n\n  // 16 - 231\n  for (r = 0; r < 6; r++) {\n    for (g = 0; g < 6; g++) {\n      for (b = 0; b < 6; b++) {\n        i = 16 + r * 36 + g * 6 + b;\n        push(i, r ? r * 40 + 55 : 0, g ? g * 40 + 55 : 0, b ? b * 40 + 55 : 0);\n      }\n    }\n  }\n\n  // 232 - 255 are grey.\n  for (g = 0; g < 24; g++) {\n    l = g * 10 + 8;\n    i = 232 + g;\n    push(i, l, l, l);\n  }\n\n  return cols;\n})();\n\nexport const colorNames: { [key: string]: number } = {\n  // special\n  default: -1,\n  normal: -1,\n  bg: -1,\n  fg: -1,\n  // normal\n  black: 0,\n  red: 1,\n  green: 2,\n  yellow: 3,\n  blue: 4,\n  magenta: 5,\n  cyan: 6,\n  white: 7,\n  // light\n  lightblack: 8,\n  lightred: 9,\n  lightgreen: 10,\n  lightyellow: 11,\n  lightblue: 12,\n  lightmagenta: 13,\n  lightcyan: 14,\n  lightwhite: 15,\n  // bright\n  brightblack: 8,\n  brightred: 9,\n  brightgreen: 10,\n  brightyellow: 11,\n  brightblue: 12,\n  brightmagenta: 13,\n  brightcyan: 14,\n  brightwhite: 15,\n  // alternate spellings\n  grey: 8,\n  gray: 8,\n  lightgrey: 7,\n  lightgray: 7,\n  brightgrey: 7,\n  brightgray: 7,\n};\n\nexport function convert(color: ColorInput): number {\n  let result: number;\n  if (typeof color === 'number') {\n    result = color;\n  } else if (typeof color === 'string') {\n    let name = color.replace(/[\\- ]/g, '');\n    if (colorNames[name] !== null) {\n      result = colorNames[name];\n    } else if (color.startsWith('#')) {\n      // Handle hex colors like #ff0000\n      const hex = color.slice(1);\n      if (hex.length === 6) {\n        const r = parseInt(hex.slice(0, 2), 16);\n        const g = parseInt(hex.slice(2, 4), 16);\n        const b = parseInt(hex.slice(4, 6), 16);\n        result = (r << 16) | (g << 8) | b; // Return full RGB value\n      } else {\n        result = match(color);\n      }\n    } else {\n      result = match(color);\n    }\n  } else if (Array.isArray(color) && color.length === 3) {\n    // Handle RGB arrays like [255, 0, 0]\n    const [r, g, b] = color;\n    if (r >= 0 && r <= 255 && g >= 0 && g <= 255 && b >= 0 && b <= 255) {\n      result = (r << 16) | (g << 8) | b; // Return full RGB value\n    } else {\n      result = match(color);\n    }\n  } else if (Array.isArray(color)) {\n    result = match(color);\n  } else {\n    result = -1;\n  }\n\n  // Return default color marker for undefined/null/-1, otherwise return the color\n  return result !== -1 ? result : 0xffffff;\n}\n\n// Map higher colors to the first 8 colors.\n// This allows translation of high colors to low colors on 8-color terminals.\n// Why the hell did I do this by hand?\nexport const ccolors: any = {\n  blue: [\n    4,\n    12,\n    [17, 21],\n    [24, 27],\n    [31, 33],\n    [38, 39],\n    45,\n    [54, 57],\n    [60, 63],\n    [67, 69],\n    [74, 75],\n    81,\n    [91, 93],\n    [97, 99],\n    [103, 105],\n    [110, 111],\n    117,\n    [128, 129],\n    [134, 135],\n    [140, 141],\n    [146, 147],\n    153,\n    165,\n    171,\n    177,\n    183,\n    189,\n  ],\n\n  green: [\n    2,\n    10,\n    22,\n    [28, 29],\n    [34, 36],\n    [40, 43],\n    [46, 50],\n    [64, 65],\n    [70, 72],\n    [76, 79],\n    [82, 86],\n    [106, 108],\n    [112, 115],\n    [118, 122],\n    [148, 151],\n    [154, 158],\n    [190, 194],\n  ],\n\n  cyan: [\n    6, 14, 23, 30, 37, 44, 51, 66, 73, 80, 87, 109, 116, 123, 152, 159, 195,\n  ],\n\n  red: [\n    1,\n    9,\n    52,\n    [88, 89],\n    [94, 95],\n    [124, 126],\n    [130, 132],\n    [136, 138],\n    [160, 163],\n    [166, 169],\n    [172, 175],\n    [178, 181],\n    [196, 200],\n    [202, 206],\n    [208, 212],\n    [214, 218],\n    [220, 224],\n  ],\n\n  magenta: [\n    5, 13, 53, 90, 96, 127, 133, 139, 164, 170, 176, 182, 201, 207, 213, 219,\n    225,\n  ],\n\n  yellow: [3, 11, 58, [100, 101], [142, 144], [184, 187], [226, 230]],\n\n  black: [0, 8, 16, 59, 102, [232, 243]],\n\n  white: [7, 15, 145, 188, 231, [244, 255]],\n};\n\nexport const ncolors: string[] = [];\n\nObject.keys(ccolors).forEach(function (name) {\n  ccolors[name].forEach(function (offset: any) {\n    if (typeof offset === 'number') {\n      ncolors[offset] = name;\n      ccolors[offset] = colorNames[name];\n      return;\n    }\n    for (var i = offset[0], l = offset[1]; i <= l; i++) {\n      ncolors[i] = name;\n      ccolors[i] = colorNames[name];\n    }\n  });\n  delete ccolors[name];\n});\n","/**\n * keys.js - emit key presses\n * Copyright (c) 2010-2015, Joyent, Inc. and other contributors (MIT License)\n * https://github.com/chjj/blessed\n */\n\n// Originally taken from the node.js tree:\n//\n// Copyright Joyent, Inc. and other Node contributors. All rights reserved.\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n// IN THE SOFTWARE.\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { EventEmitter } from 'events';\nimport { StringDecoder } from 'string_decoder';\n\n// NOTE: node <=v0.8.x has no EventEmitter.listenerCount\ninterface KeypressEvent {\n  name?: string;\n  ctrl?: boolean;\n  meta?: boolean;\n  shift?: boolean;\n  sequence?: string;\n  [key: string]: any;\n}\n\ninterface KeypressStream {\n  _keypressDecoder?: any;\n  encoding?: string;\n  listeners(event: string): Function[];\n  listenerCount?(event: string): number;\n  on(event: string, listener: Function): this;\n  once(event: string, listener: Function): this;\n  removeListener(event: string, listener: Function): this;\n  removeAllListeners(event?: string): this;\n  emit(event: string, ...args: any[]): boolean;\n}\n\nfunction listenerCount(stream: KeypressStream, event: string): number {\n  return stream.listenerCount\n    ? stream.listenerCount(event)\n    : stream.listeners(event).length;\n}\n\n/**\n * accepts a readable Stream instance and makes it emit \"keypress\" events\n */\n\nfunction emitKeypressEvents(stream: KeypressStream): void {\n  if (stream._keypressDecoder) return;\n  // StringDecoder imported at top of file\n  stream._keypressDecoder = new StringDecoder('utf8');\n\n  function onData(b: Buffer): void {\n    if (listenerCount(stream, 'keypress') > 0) {\n      var r = stream._keypressDecoder.write(b);\n      if (r) emitKeys(stream, r);\n    } else {\n      // Nobody's watching anyway\n      stream.removeListener('data', onData);\n      stream.on('newListener', onNewListener);\n    }\n  }\n\n  function onNewListener(event: string): void {\n    if (event === 'keypress') {\n      stream.on('data', onData);\n      stream.removeListener('newListener', onNewListener);\n    }\n  }\n\n  if (listenerCount(stream, 'keypress') > 0) {\n    stream.on('data', onData);\n  } else {\n    stream.on('newListener', onNewListener);\n  }\n}\nexports.emitKeypressEvents = emitKeypressEvents;\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\n// Regexes used for ansi escape code splitting\nvar metaKeyCodeReAnywhere = /(?:\\x1b)([a-zA-Z0-9])/;\nvar metaKeyCodeRe = new RegExp('^' + metaKeyCodeReAnywhere.source + '$');\nvar functionKeyCodeReAnywhere = new RegExp(\n  '(?:\\x1b+)(O|N|\\\\[|\\\\[\\\\[)(?:' +\n    [\n      '(\\\\d+)(?:;(\\\\d+))?([~^$])',\n      '(?:M([@ #!a`])(.)(.))', // mouse\n      '(?:1;)?(\\\\d+)?([a-zA-Z])',\n    ].join('|') +\n    ')'\n);\nvar functionKeyCodeRe = new RegExp('^' + functionKeyCodeReAnywhere.source);\nvar escapeCodeReAnywhere = new RegExp(\n  [\n    functionKeyCodeReAnywhere.source,\n    metaKeyCodeReAnywhere.source,\n    /\\x1b./.source,\n  ].join('|')\n);\n\nfunction emitKeys(stream: KeypressStream, s: string | Buffer): void {\n  if (Buffer.isBuffer(s)) {\n    if (s[0] > 127 && s[1] === undefined) {\n      const buf = Buffer.from(s);\n      buf[0] -= 128;\n      s = '\\x1b' + buf.toString((stream.encoding as BufferEncoding) || 'utf-8');\n    } else {\n      s = s.toString((stream.encoding as BufferEncoding) || 'utf-8');\n    }\n  }\n\n  if (isMouse(s)) return;\n\n  var buffer: string[] = [];\n  var match: RegExpExecArray | null;\n  while ((match = escapeCodeReAnywhere.exec(s))) {\n    buffer = buffer.concat(s.slice(0, match.index).split(''));\n    buffer.push(match[0]);\n    s = s.slice(match.index + match[0].length);\n  }\n  buffer = buffer.concat(s.split(''));\n\n  buffer.forEach(function (s: string): void {\n    var ch: string,\n      key: KeypressEvent = {\n        sequence: s,\n        name: undefined,\n        ctrl: false,\n        meta: false,\n        shift: false,\n      },\n      parts;\n\n    if (s === '\\r') {\n      // carriage return\n      key.name = 'return';\n    } else if (s === '\\n') {\n      // enter, should have been called linefeed\n      key.name = 'enter';\n      // linefeed\n      // key.name = 'linefeed';\n    } else if (s === '\\t') {\n      // tab\n      key.name = 'tab';\n    } else if (\n      s === '\\b' ||\n      s === '\\x7f' ||\n      s === '\\x1b\\x7f' ||\n      s === '\\x1b\\b'\n    ) {\n      // backspace or ctrl+h\n      key.name = 'backspace';\n      key.meta = s.charAt(0) === '\\x1b';\n    } else if (s === '\\x1b' || s === '\\x1b\\x1b') {\n      // escape key\n      key.name = 'escape';\n      key.meta = s.length === 2;\n    } else if (s === ' ' || s === '\\x1b ') {\n      key.name = 'space';\n      key.meta = s.length === 2;\n    } else if (s.length === 1 && s <= '\\x1a') {\n      // ctrl+letter\n      key.name = String.fromCharCode(s.charCodeAt(0) + 'a'.charCodeAt(0) - 1);\n      key.ctrl = true;\n    } else if (s.length === 1 && s >= 'a' && s <= 'z') {\n      // lowercase letter\n      key.name = s;\n    } else if (s.length === 1 && s >= 'A' && s <= 'Z') {\n      // shift+letter\n      key.name = s.toLowerCase();\n      key.shift = true;\n    } else if ((parts = metaKeyCodeRe.exec(s))) {\n      // meta+character key\n      key.name = parts[1].toLowerCase();\n      key.meta = true;\n      key.shift = /^[A-Z]$/.test(parts[1]);\n    } else if ((parts = functionKeyCodeRe.exec(s))) {\n      // ansi escape sequence\n\n      // reassemble the key code leaving out leading \\x1b's,\n      // the modifier key bitflag and any meaningless \"1;\" sequence\n      var code =\n          (parts[1] || '') +\n          (parts[2] || '') +\n          (parts[4] || '') +\n          (parts[9] || ''),\n        modifier = (parts[3] || parts[8] || 1) - 1;\n\n      // Parse the key modifier\n      key.ctrl = !!(modifier & 4);\n      key.meta = !!(modifier & 10);\n      key.shift = !!(modifier & 1);\n      key.code = code;\n\n      // Parse the key itself\n      switch (code) {\n        /* xterm/gnome ESC O letter */\n        case 'OP':\n          key.name = 'f1';\n          break;\n        case 'OQ':\n          key.name = 'f2';\n          break;\n        case 'OR':\n          key.name = 'f3';\n          break;\n        case 'OS':\n          key.name = 'f4';\n          break;\n\n        /* xterm/rxvt ESC [ number ~ */\n        case '[11~':\n          key.name = 'f1';\n          break;\n        case '[12~':\n          key.name = 'f2';\n          break;\n        case '[13~':\n          key.name = 'f3';\n          break;\n        case '[14~':\n          key.name = 'f4';\n          break;\n\n        /* from Cygwin and used in libuv */\n        case '[[A':\n          key.name = 'f1';\n          break;\n        case '[[B':\n          key.name = 'f2';\n          break;\n        case '[[C':\n          key.name = 'f3';\n          break;\n        case '[[D':\n          key.name = 'f4';\n          break;\n        case '[[E':\n          key.name = 'f5';\n          break;\n\n        /* common */\n        case '[15~':\n          key.name = 'f5';\n          break;\n        case '[17~':\n          key.name = 'f6';\n          break;\n        case '[18~':\n          key.name = 'f7';\n          break;\n        case '[19~':\n          key.name = 'f8';\n          break;\n        case '[20~':\n          key.name = 'f9';\n          break;\n        case '[21~':\n          key.name = 'f10';\n          break;\n        case '[23~':\n          key.name = 'f11';\n          break;\n        case '[24~':\n          key.name = 'f12';\n          break;\n\n        /* xterm ESC [ letter */\n        case '[A':\n          key.name = 'up';\n          break;\n        case '[B':\n          key.name = 'down';\n          break;\n        case '[C':\n          key.name = 'right';\n          break;\n        case '[D':\n          key.name = 'left';\n          break;\n        case '[E':\n          key.name = 'clear';\n          break;\n        case '[F':\n          key.name = 'end';\n          break;\n        case '[H':\n          key.name = 'home';\n          break;\n\n        /* xterm/gnome ESC O letter */\n        case 'OA':\n          key.name = 'up';\n          break;\n        case 'OB':\n          key.name = 'down';\n          break;\n        case 'OC':\n          key.name = 'right';\n          break;\n        case 'OD':\n          key.name = 'left';\n          break;\n        case 'OE':\n          key.name = 'clear';\n          break;\n        case 'OF':\n          key.name = 'end';\n          break;\n        case 'OH':\n          key.name = 'home';\n          break;\n\n        /* xterm/rxvt ESC [ number ~ */\n        case '[1~':\n          key.name = 'home';\n          break;\n        case '[2~':\n          key.name = 'insert';\n          break;\n        case '[3~':\n          key.name = 'delete';\n          break;\n        case '[4~':\n          key.name = 'end';\n          break;\n        case '[5~':\n          key.name = 'pageup';\n          break;\n        case '[6~':\n          key.name = 'pagedown';\n          break;\n\n        /* putty */\n        case '[[5~':\n          key.name = 'pageup';\n          break;\n        case '[[6~':\n          key.name = 'pagedown';\n          break;\n\n        /* rxvt */\n        case '[7~':\n          key.name = 'home';\n          break;\n        case '[8~':\n          key.name = 'end';\n          break;\n\n        /* rxvt keys with modifiers */\n        case '[a':\n          key.name = 'up';\n          key.shift = true;\n          break;\n        case '[b':\n          key.name = 'down';\n          key.shift = true;\n          break;\n        case '[c':\n          key.name = 'right';\n          key.shift = true;\n          break;\n        case '[d':\n          key.name = 'left';\n          key.shift = true;\n          break;\n        case '[e':\n          key.name = 'clear';\n          key.shift = true;\n          break;\n\n        case '[2$':\n          key.name = 'insert';\n          key.shift = true;\n          break;\n        case '[3$':\n          key.name = 'delete';\n          key.shift = true;\n          break;\n        case '[5$':\n          key.name = 'pageup';\n          key.shift = true;\n          break;\n        case '[6$':\n          key.name = 'pagedown';\n          key.shift = true;\n          break;\n        case '[7$':\n          key.name = 'home';\n          key.shift = true;\n          break;\n        case '[8$':\n          key.name = 'end';\n          key.shift = true;\n          break;\n\n        case 'Oa':\n          key.name = 'up';\n          key.ctrl = true;\n          break;\n        case 'Ob':\n          key.name = 'down';\n          key.ctrl = true;\n          break;\n        case 'Oc':\n          key.name = 'right';\n          key.ctrl = true;\n          break;\n        case 'Od':\n          key.name = 'left';\n          key.ctrl = true;\n          break;\n        case 'Oe':\n          key.name = 'clear';\n          key.ctrl = true;\n          break;\n\n        case '[2^':\n          key.name = 'insert';\n          key.ctrl = true;\n          break;\n        case '[3^':\n          key.name = 'delete';\n          key.ctrl = true;\n          break;\n        case '[5^':\n          key.name = 'pageup';\n          key.ctrl = true;\n          break;\n        case '[6^':\n          key.name = 'pagedown';\n          key.ctrl = true;\n          break;\n        case '[7^':\n          key.name = 'home';\n          key.ctrl = true;\n          break;\n        case '[8^':\n          key.name = 'end';\n          key.ctrl = true;\n          break;\n\n        /* misc. */\n        case '[Z':\n          key.name = 'tab';\n          key.shift = true;\n          break;\n        default:\n          key.name = 'undefined';\n          break;\n      }\n    }\n\n    // Don't emit a key if no name was found\n    if (key.name === undefined) {\n      key = undefined;\n    }\n\n    if (s.length === 1) {\n      ch = s;\n    }\n\n    if (key || ch) {\n      stream.emit('keypress', ch, key);\n      // if (key && key.name === 'return') {\n      //   var nkey = {};\n      //   Object.keys(key).forEach(function(k) {\n      //     nkey[k] = key[k];\n      //   });\n      //   nkey.name = 'enter';\n      //   stream.emit('keypress', ch, nkey);\n      // }\n    }\n  });\n}\n\nfunction isMouse(s: string): boolean {\n  return (\n    /\\x1b\\[M/.test(s) ||\n    /\\x1b\\[M([\\x00\\u0020-\\uffff]{3})/.test(s) ||\n    /\\x1b\\[(\\d+;\\d+;\\d+)M/.test(s) ||\n    /\\x1b\\[<(\\d+;\\d+;\\d+)([mM])/.test(s) ||\n    /\\x1b\\[<(\\d+;\\d+;\\d+;\\d+)&w/.test(s) ||\n    /\\x1b\\[24([0135])~\\[(\\d+),(\\d+)\\]\\r/.test(s) ||\n    /\\x1b\\[(O|I)/.test(s)\n  );\n}\n","/**\n * gpmclient.js - support the gpm mouse protocol\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\nimport net from 'net';\nimport fs from 'fs';\nimport { EventEmitter } from 'events';\n\nvar GPM_USE_MAGIC = false;\n\nvar GPM_MOVE = 1,\n  GPM_DRAG = 2,\n  GPM_DOWN = 4,\n  GPM_UP = 8;\n\nvar GPM_DOUBLE = 32,\n  GPM_MFLAG = 128;\n\nvar GPM_REQ_NOPASTE = 3,\n  GPM_HARD = 256;\n\nvar GPM_MAGIC = 0x47706d4c;\nvar GPM_SOCKET = '/dev/gpmctl';\n\n// typedef struct Gpm_Connect {\n//   unsigned short eventMask, defaultMask;\n//   unsigned short minMod, maxMod;\n//   int pid;\n//   int vc;\n// } Gpm_Connect;\n\ninterface GpmConnect {\n  eventMask: number;\n  defaultMask: number;\n  minMod: number;\n  maxMod: number;\n  pid: number;\n  vc: number;\n}\n\ninterface GpmEvent {\n  buttons: number;\n  modifiers: number;\n  vc: number;\n  dx: number;\n  dy: number;\n  x: number;\n  y: number;\n  type: number;\n  clicks: number;\n  margin: number;\n  wdx: number;\n  wdy: number;\n}\n\ninterface GpmClientInterface extends EventEmitter {\n  gpm?: any;\n  stop(): void;\n  ButtonName(btn: number): string;\n  hasShiftKey(mod: number): boolean;\n  hasCtrlKey(mod: number): boolean;\n  hasMetaKey(mod: number): boolean;\n}\n\nfunction send_config(\n  socket: any,\n  Gpm_Connect: GpmConnect,\n  callback?: Function\n): void {\n  var buffer: Buffer;\n  if (GPM_USE_MAGIC) {\n    buffer = new Buffer(20);\n    buffer.writeUInt32LE(GPM_MAGIC, 0);\n    buffer.writeUInt16LE(Gpm_Connect.eventMask, 4);\n    buffer.writeUInt16LE(Gpm_Connect.defaultMask, 6);\n    buffer.writeUInt16LE(Gpm_Connect.minMod, 8);\n    buffer.writeUInt16LE(Gpm_Connect.maxMod, 10);\n    buffer.writeInt16LE(process.pid, 12);\n    buffer.writeInt16LE(Gpm_Connect.vc, 16);\n  } else {\n    buffer = new Buffer(16);\n    buffer.writeUInt16LE(Gpm_Connect.eventMask, 0);\n    buffer.writeUInt16LE(Gpm_Connect.defaultMask, 2);\n    buffer.writeUInt16LE(Gpm_Connect.minMod, 4);\n    buffer.writeUInt16LE(Gpm_Connect.maxMod, 6);\n    buffer.writeInt16LE(Gpm_Connect.pid, 8);\n    buffer.writeInt16LE(Gpm_Connect.vc, 12);\n  }\n  socket.write(buffer, function () {\n    if (callback) callback();\n  });\n}\n\n// typedef struct Gpm_Event {\n//   unsigned char buttons, modifiers;  // try to be a multiple of 4\n//   unsigned short vc;\n//   short dx, dy, x, y; // displacement x,y for this event, and absolute x,y\n//   enum Gpm_Etype type;\n//   // clicks e.g. double click are determined by time-based processing\n//   int clicks;\n//   enum Gpm_Margin margin;\n//   // wdx/y: displacement of wheels in this event. Absolute values are not\n//   // required, because wheel movement is typically used for scrolling\n//   // or selecting fields, not for cursor positioning. The application\n//   // can determine when the end of file or form is reached, and not\n//   // go any further.\n//   // A single mouse will use wdy, \"vertical scroll\" wheel.\n//   short wdx, wdy;\n// } Gpm_Event;\n\nfunction parseEvent(raw: Buffer): GpmEvent {\n  var evnt: any = {};\n  evnt.buttons = raw[0];\n  evnt.modifiers = raw[1];\n  evnt.vc = raw.readUInt16LE(2);\n  evnt.dx = raw.readInt16LE(4);\n  evnt.dy = raw.readInt16LE(6);\n  evnt.x = raw.readInt16LE(8);\n  evnt.y = raw.readInt16LE(10);\n  evnt.type = raw.readInt16LE(12);\n  evnt.clicks = raw.readInt32LE(16);\n  evnt.margin = raw.readInt32LE(20);\n  evnt.wdx = raw.readInt16LE(24);\n  evnt.wdy = raw.readInt16LE(26);\n  return evnt;\n}\n\nfunction GpmClient(\n  this: GpmClientInterface,\n  options?: any\n): GpmClientInterface {\n  if (!(this instanceof GpmClient)) {\n    return new GpmClient(options);\n  }\n\n  EventEmitter.call(this);\n\n  var pid: number = process.pid;\n\n  // check tty for /dev/tty[n]\n  var path: string | undefined;\n  try {\n    path = fs.readlinkSync('/proc/' + pid + '/fd/0');\n  } catch (e) {}\n  var tty = path ? /tty[0-9]+$/.exec(path) : null;\n  if (tty === null) {\n    // TODO: should  also check for /dev/input/..\n  }\n\n  var vc: number | undefined;\n  if (tty) {\n    tty = tty[0];\n    vc = +/[0-9]+$/.exec(tty)[0];\n  }\n\n  var self = this;\n\n  if (tty) {\n    fs.stat(GPM_SOCKET, function (err, stat) {\n      if (err || !stat.isSocket()) {\n        return;\n      }\n\n      var conf: GpmConnect = {\n        eventMask: 0xffff,\n        defaultMask: GPM_MOVE | GPM_HARD,\n        minMod: 0,\n        maxMod: 0xffff,\n        pid: pid,\n        vc: vc,\n      };\n\n      var gpm = net.createConnection(GPM_SOCKET);\n      this.gpm = gpm;\n\n      gpm.on('connect', function () {\n        send_config(gpm, conf, function () {\n          conf.pid = 0;\n          conf.vc = GPM_REQ_NOPASTE;\n          //send_config(gpm, conf);\n        });\n      });\n\n      gpm.on('data', function (packet) {\n        var evnt = parseEvent(packet);\n        switch (evnt.type & 15) {\n          case GPM_MOVE:\n            if (evnt.dx || evnt.dy) {\n              self.emit('move', evnt.buttons, evnt.modifiers, evnt.x, evnt.y);\n            }\n            if (evnt.wdx || evnt.wdy) {\n              self.emit(\n                'mousewheel',\n                evnt.buttons,\n                evnt.modifiers,\n                evnt.x,\n                evnt.y,\n                evnt.wdx,\n                evnt.wdy\n              );\n            }\n            break;\n          case GPM_DRAG:\n            if (evnt.dx || evnt.dy) {\n              self.emit('drag', evnt.buttons, evnt.modifiers, evnt.x, evnt.y);\n            }\n            if (evnt.wdx || evnt.wdy) {\n              self.emit(\n                'mousewheel',\n                evnt.buttons,\n                evnt.modifiers,\n                evnt.x,\n                evnt.y,\n                evnt.wdx,\n                evnt.wdy\n              );\n            }\n            break;\n          case GPM_DOWN:\n            self.emit('btndown', evnt.buttons, evnt.modifiers, evnt.x, evnt.y);\n            if (evnt.type & GPM_DOUBLE) {\n              self.emit(\n                'dblclick',\n                evnt.buttons,\n                evnt.modifiers,\n                evnt.x,\n                evnt.y\n              );\n            }\n            break;\n          case GPM_UP:\n            self.emit('btnup', evnt.buttons, evnt.modifiers, evnt.x, evnt.y);\n            if (!(evnt.type & GPM_MFLAG)) {\n              self.emit('click', evnt.buttons, evnt.modifiers, evnt.x, evnt.y);\n            }\n            break;\n        }\n      });\n\n      gpm.on('error', function () {\n        self.stop();\n      });\n    });\n  }\n}\n\nGpmClient.prototype.__proto__ = EventEmitter.prototype;\n\nGpmClient.prototype.stop = function (this: GpmClientInterface): void {\n  if (this.gpm) {\n    this.gpm.end();\n  }\n  delete this.gpm;\n};\n\nGpmClient.prototype.ButtonName = function (\n  this: GpmClientInterface,\n  btn: number\n): string {\n  if (btn & 4) return 'left';\n  if (btn & 2) return 'middle';\n  if (btn & 1) return 'right';\n  return '';\n};\n\nGpmClient.prototype.hasShiftKey = function (\n  this: GpmClientInterface,\n  mod: number\n): boolean {\n  return mod & 1;\n};\n\nGpmClient.prototype.hasCtrlKey = function (\n  this: GpmClientInterface,\n  mod: number\n): boolean {\n  return mod & 4;\n};\n\nGpmClient.prototype.hasMetaKey = function (\n  this: GpmClientInterface,\n  mod: number\n): boolean {\n  return mod & 8;\n};\n\nmodule.exports = GpmClient;\n","// @ts-nocheck\n/**\n * program.js - basic curses-like functionality for blessed.\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\n/**\n * Modules\n */\n\nimport { EventEmitter } from 'events';\nimport { StringDecoder } from 'string_decoder';\nimport cp from 'child_process';\nimport util from 'util';\nimport fs from 'fs';\n\nimport Tput from './tput.js';\nimport * as colors from './colors.js';\nvar slice = Array.prototype.slice;\n\nvar nextTick = global.setImmediate || process.nextTick.bind(process);\n\n/**\n * Program\n */\n\ninterface ProgramOptions {\n  input?: any;\n  output?: any;\n  log?: string;\n  dump?: string;\n  zero?: boolean;\n  buffer?: boolean;\n  terminal?: string;\n  term?: string;\n  debug?: boolean;\n  resizeTimeout?: number;\n  [key: string]: any;\n}\n\ninterface ProgramInterface extends EventEmitter {\n  options: ProgramOptions;\n  input: any;\n  output: any;\n  x: number;\n  y: number;\n  savedX: number;\n  savedY: number;\n  cols: number;\n  rows: number;\n  scrollTop: number;\n  scrollBottom: number;\n  _terminal: string;\n  tput?: any;\n\n  // Terminal feature flags\n  isOSXTerm: boolean;\n  isiTerm2: boolean;\n  isXFCE: boolean;\n  isTerminator: boolean;\n  isLXDE: boolean;\n  isVTE: boolean;\n  isRxvt: boolean;\n  isXterm: boolean;\n  isTmux: boolean;\n  isScreen: boolean;\n\n  // Methods\n  listen(): void;\n  destroy(): void;\n  write(text: string): boolean;\n  flush(): void;\n  clear(): void;\n  reset(): void;\n  _write(text: string): boolean;\n  log(...args: any[]): void;\n  [key: string]: any;\n}\n\nfunction Program(\n  this: ProgramInterface,\n  options?: ProgramOptions | any\n): ProgramInterface {\n  var self = this;\n\n  if (!(this instanceof Program)) {\n    return new Program(options);\n  }\n\n  Program.bind(this);\n\n  EventEmitter.call(this);\n\n  if (!options || options.__proto__ !== Object.prototype) {\n    options = {\n      input: arguments[0],\n      output: arguments[1],\n    };\n  }\n\n  this.options = options;\n  this.input = options.input || process.stdin;\n  this.output = options.output || process.stdout;\n\n  options.log = options.log || options.dump;\n  if (options.log) {\n    this._logger = fs.createWriteStream(options.log);\n    if (options.dump) this.setupDump();\n  }\n\n  this.zero = options.zero !== false;\n  this.useBuffer = options.buffer;\n\n  this.x = 0;\n  this.y = 0;\n  this.savedX = 0;\n  this.savedY = 0;\n\n  this.cols = this.output.columns || 1;\n  this.rows = this.output.rows || 1;\n\n  this.scrollTop = 0;\n  this.scrollBottom = this.rows - 1;\n\n  this._terminal =\n    options.terminal ||\n    options.term ||\n    process.env.TERM ||\n    (process.platform === 'win32' ? 'windows-ansi' : 'xterm');\n\n  this._terminal = this._terminal.toLowerCase();\n\n  // OSX\n  this.isOSXTerm = process.env.TERM_PROGRAM === 'Apple_Terminal';\n  this.isiTerm2 =\n    process.env.TERM_PROGRAM === 'iTerm.app' || !!process.env.ITERM_SESSION_ID;\n\n  // VTE\n  // NOTE: lxterminal does not provide an env variable to check for.\n  // NOTE: gnome-terminal and sakura use a later version of VTE\n  // which provides VTE_VERSION as well as supports SGR events.\n  this.isXFCE = /xfce/i.test(process.env.COLORTERM);\n  this.isTerminator = !!process.env.TERMINATOR_UUID;\n  this.isLXDE = false;\n  this.isVTE =\n    !!process.env.VTE_VERSION ||\n    this.isXFCE ||\n    this.isTerminator ||\n    this.isLXDE;\n\n  // xterm and rxvt - not accurate\n  this.isRxvt = /rxvt/i.test(process.env.COLORTERM);\n  this.isXterm = false;\n\n  this.tmux = !!process.env.TMUX;\n  this.tmuxVersion = (function () {\n    if (!self.tmux) return 2;\n    try {\n      var version = cp.execFileSync('tmux', ['-V'], { encoding: 'utf8' });\n      return +/^tmux ([\\d.]+)/i.exec(version.trim().split('\\n')[0])[1];\n    } catch (e) {\n      return 2;\n    }\n  })();\n\n  this._buf = '';\n  this._flush = this.flush.bind(this);\n\n  if (options.tput !== false) {\n    this.setupTput();\n  }\n\n  this.listen();\n}\n\nProgram.global = null;\n\nProgram.total = 0;\n\nProgram.instances = [];\n\nProgram.bind = function (program: ProgramInterface): void {\n  if (!Program.global) {\n    Program.global = program;\n  }\n\n  if (!~Program.instances.indexOf(program)) {\n    Program.instances.push(program);\n    program.index = Program.total;\n    Program.total++;\n  }\n\n  if (Program._bound) return;\n  Program._bound = true;\n\n  unshiftEvent(\n    process,\n    'exit',\n    (Program._exitHandler = function () {\n      Program.instances.forEach(function (program) {\n        // Potentially reset window title on exit:\n        // if (program._originalTitle) {\n        //   program.setTitle(program._originalTitle);\n        // }\n        // Ensure the buffer is flushed (it should\n        // always be at this point, but who knows).\n        program.flush();\n        // Ensure _exiting is set (could technically\n        // use process._exiting).\n        program._exiting = true;\n      });\n    })\n  );\n};\n\nProgram.prototype.__proto__ = EventEmitter.prototype;\n\nProgram.prototype.type = 'program';\n\nProgram.prototype.log = function (\n  this: ProgramInterface,\n  ...args: any[]\n): void {\n  return this._log('LOG', util.format.apply(util, arguments));\n};\n\nProgram.prototype.debug = function (\n  this: ProgramInterface,\n  ...args: any[]\n): void {\n  if (!this.options.debug) return;\n  return this._log('DEBUG', util.format.apply(util, arguments));\n};\n\nProgram.prototype._log = function (\n  this: ProgramInterface,\n  pre: string,\n  msg: string\n): void {\n  if (!this._logger) return;\n  return this._logger.write(pre + ': ' + msg + '\\n-\\n');\n};\n\nProgram.prototype.setupDump = function (this: ProgramInterface): void {\n  var self = this,\n    write = this.output.write,\n    decoder = new StringDecoder('utf8');\n\n  function stringify(data) {\n    return caret(\n      data.replace(/\\r/g, '\\\\r').replace(/\\n/g, '\\\\n').replace(/\\t/g, '\\\\t')\n    ).replace(/[^ -~]/g, function (ch) {\n      if (ch.charCodeAt(0) > 0xff) return ch;\n      ch = ch.charCodeAt(0).toString(16);\n      if (ch.length > 2) {\n        if (ch.length < 4) ch = '0' + ch;\n        return '\\\\u' + ch;\n      }\n      if (ch.length < 2) ch = '0' + ch;\n      return '\\\\x' + ch;\n    });\n  }\n\n  function caret(data) {\n    return data.replace(/[\\0\\x80\\x1b-\\x1f\\x7f\\x01-\\x1a]/g, function (ch) {\n      switch (ch) {\n        case '\\0':\n        case '\\x80':\n          ch = '@';\n          break;\n        case '\\x1b':\n          ch = '[';\n          break;\n        case '\\x1c':\n          ch = '\\\\';\n          break;\n        case '\\x1d':\n          ch = ']';\n          break;\n        case '\\x1e':\n          ch = '^';\n          break;\n        case '\\x1f':\n          ch = '_';\n          break;\n        case '\\x7f':\n          ch = '?';\n          break;\n        default:\n          ch = ch.charCodeAt(0);\n          // From ('A' - 64) to ('Z' - 64).\n          if (ch >= 1 && ch <= 26) {\n            ch = String.fromCharCode(ch + 64);\n          } else {\n            return String.fromCharCode(ch);\n          }\n          break;\n      }\n      return '^' + ch;\n    });\n  }\n\n  if (this.input && typeof this.input.on === 'function') {\n    this.input.on('data', function (data) {\n      self._log('IN', stringify(decoder.write(data)));\n    });\n  }\n\n  this.output.write = function (data) {\n    self._log('OUT', stringify(data));\n    return write.apply(this, arguments);\n  };\n};\n\nProgram.prototype.setupTput = function (this: ProgramInterface): void {\n  if (this._tputSetup) return;\n  this._tputSetup = true;\n\n  var self = this,\n    options = this.options,\n    write = this._write.bind(this);\n\n  var tput = (this.tput = new Tput({\n    terminal: this.terminal,\n    padding: options.padding,\n    extended: options.extended,\n    printf: options.printf,\n    termcap: options.termcap,\n    forceUnicode: options.forceUnicode,\n  }));\n\n  if (tput.error) {\n    nextTick(function () {\n      self.emit('warning', tput.error.message);\n    });\n  }\n\n  if (tput.padding) {\n    nextTick(function () {\n      self.emit('warning', 'Terminfo padding has been enabled.');\n    });\n  }\n\n  this.put = function () {\n    var args = slice.call(arguments),\n      cap = args.shift();\n\n    if (tput[cap]) {\n      return this._write(tput[cap].apply(tput, args));\n    }\n  };\n\n  Object.keys(tput).forEach(function (key) {\n    if (self[key] == null) {\n      self[key] = tput[key];\n    }\n\n    if (typeof tput[key] !== 'function') {\n      self.put[key] = tput[key];\n      return;\n    }\n\n    if (tput.padding) {\n      self.put[key] = function () {\n        return tput._print(tput[key].apply(tput, arguments), write);\n      };\n    } else {\n      self.put[key] = function () {\n        return self._write(tput[key].apply(tput, arguments));\n      };\n    }\n  });\n};\n\nProgram.prototype.__defineGetter__('terminal', function () {\n  return this._terminal;\n});\n\nProgram.prototype.__defineSetter__('terminal', function (terminal) {\n  this.setTerminal(terminal);\n  return this.terminal;\n});\n\nProgram.prototype.setTerminal = function (terminal) {\n  this._terminal = terminal.toLowerCase();\n  delete this._tputSetup;\n  this.setupTput();\n};\n\nProgram.prototype.has = function (name) {\n  return this.tput ? this.tput.has(name) : false;\n};\n\nProgram.prototype.term = function (is) {\n  return this.terminal.indexOf(is) === 0;\n};\n\nProgram.prototype.listen = function (this: ProgramInterface): void {\n  var self = this;\n\n  // Potentially reset window title on exit:\n  // if (!this.isRxvt) {\n  //   if (!this.isVTE) this.setTitleModeFeature(3);\n  //   this.manipulateWindow(21, function(err, data) {\n  //     if (err) return;\n  //     self._originalTitle = data.text;\n  //   });\n  // }\n\n  // Listen for keys/mouse on input\n  if (!this.input._blessedInput) {\n    this.input._blessedInput = 1;\n    this._listenInput();\n  } else {\n    this.input._blessedInput++;\n  }\n\n  this.on(\n    'newListener',\n    (this._newHandler = function fn(type) {\n      if (type === 'keypress' || type === 'mouse') {\n        self.removeListener('newListener', fn);\n        if (self.input.setRawMode && !self.input.isRaw) {\n          self.input.setRawMode(true);\n          self.input.resume();\n        }\n      }\n    })\n  );\n\n  this.on('newListener', function fn(type) {\n    if (type === 'mouse') {\n      self.removeListener('newListener', fn);\n      self.bindMouse();\n    }\n  });\n\n  // Listen for resize on output\n  if (!this.output._blessedOutput) {\n    this.output._blessedOutput = 1;\n    this._listenOutput();\n  } else {\n    this.output._blessedOutput++;\n  }\n};\n\nProgram.prototype._listenInput = function (this: ProgramInterface): void {\n  var keys = require('./keys'),\n    self = this;\n\n  // Input\n  if (this.input && typeof this.input.on === 'function') {\n    this.input.on(\n      'keypress',\n      (this.input._keypressHandler = function (ch, key) {\n        key = key || { ch: ch };\n\n        if (\n          key.name === 'undefined' &&\n          (key.code === '[M' || key.code === '[I' || key.code === '[O')\n        ) {\n          // A mouse sequence. The `keys` module doesn't understand these.\n          return;\n        }\n\n        if (key.name === 'undefined') {\n          // Not sure what this is, but we should probably ignore it.\n          return;\n        }\n\n        if (key.name === 'enter' && key.sequence === '\\n') {\n          key.name = 'linefeed';\n        }\n\n        if (key.name === 'return' && key.sequence === '\\r') {\n          self.input.emit('keypress', ch, merge({}, key, { name: 'enter' }));\n        }\n\n        var name =\n          (key.ctrl ? 'C-' : '') +\n          (key.meta ? 'M-' : '') +\n          (key.shift && key.name ? 'S-' : '') +\n          (key.name || ch);\n\n        key.full = name;\n\n        Program.instances.forEach(function (program) {\n          if (program.input !== self.input) return;\n          program.emit('keypress', ch, key);\n          program.emit('key ' + name, ch, key);\n        });\n      })\n    );\n\n    this.input.on(\n      'data',\n      (this.input._dataHandler = function (data) {\n        Program.instances.forEach(function (program) {\n          if (program.input !== self.input) return;\n          program.emit('data', data);\n        });\n      })\n    );\n\n    keys.emitKeypressEvents(this.input);\n  }\n};\n\nProgram.prototype._listenOutput = function (this: ProgramInterface): void {\n  var self = this;\n\n  if (!this.output.isTTY) {\n    nextTick(function () {\n      self.emit('warning', 'Output is not a TTY');\n    });\n  }\n\n  // Output\n  function resize() {\n    Program.instances.forEach(function (program) {\n      if (program.output !== self.output) return;\n      program.cols = program.output.columns;\n      program.rows = program.output.rows;\n      program.emit('resize');\n    });\n  }\n\n  if (this.output && typeof this.output.on === 'function') {\n    this.output.on(\n      'resize',\n      (this.output._resizeHandler = function () {\n        Program.instances.forEach(function (program) {\n          if (program.output !== self.output) return;\n          if (!program.options.resizeTimeout) {\n            return resize();\n          }\n          if (program._resizeTimer) {\n            clearTimeout(program._resizeTimer);\n            delete program._resizeTimer;\n          }\n          var time =\n            typeof program.options.resizeTimeout === 'number'\n              ? program.options.resizeTimeout\n              : 300;\n          program._resizeTimer = setTimeout(resize, time);\n        });\n      })\n    );\n  }\n};\n\nProgram.prototype.destroy = function () {\n  var index = Program.instances.indexOf(this);\n\n  if (~index) {\n    Program.instances.splice(index, 1);\n    Program.total--;\n\n    this.flush();\n    this._exiting = true;\n\n    Program.global = Program.instances[0];\n\n    if (Program.total === 0) {\n      Program.global = null;\n\n      process.removeListener('exit', Program._exitHandler);\n      delete Program._exitHandler;\n\n      delete Program._bound;\n    }\n\n    this.input._blessedInput--;\n    this.output._blessedOutput--;\n\n    if (this.input._blessedInput === 0) {\n      if (typeof this.input.removeListener === 'function') {\n        this.input.removeListener('keypress', this.input._keypressHandler);\n        this.input.removeListener('data', this.input._dataHandler);\n      } else if (typeof this.input.off === 'function') {\n        this.input.off('keypress', this.input._keypressHandler);\n        this.input.off('data', this.input._dataHandler);\n      }\n      delete this.input._keypressHandler;\n      delete this.input._dataHandler;\n\n      if (this.input.setRawMode) {\n        if (this.input.isRaw) {\n          this.input.setRawMode(false);\n        }\n        if (!this.input.destroyed) {\n          this.input.pause();\n        }\n      }\n    }\n\n    if (this.output._blessedOutput === 0) {\n      if (typeof this.output.removeListener === 'function') {\n        this.output.removeListener('resize', this.output._resizeHandler);\n      } else if (typeof this.output.off === 'function') {\n        this.output.off('resize', this.output._resizeHandler);\n      }\n      delete this.output._resizeHandler;\n    }\n\n    this.removeListener('newListener', this._newHandler);\n    delete this._newHandler;\n\n    this.destroyed = true;\n    this.emit('destroy');\n  }\n};\n\nProgram.prototype.key = function (\n  this: ProgramInterface,\n  key: string,\n  listener: Function\n): this {\n  if (typeof key === 'string') key = key.split(/\\s*,\\s*/);\n  key.forEach(function (key) {\n    return this.on('key ' + key, listener);\n  }, this);\n};\n\nProgram.prototype.onceKey = function (\n  this: ProgramInterface,\n  key: string,\n  listener: Function\n): this {\n  if (typeof key === 'string') key = key.split(/\\s*,\\s*/);\n  key.forEach(function (key) {\n    return this.once('key ' + key, listener);\n  }, this);\n};\n\nProgram.prototype.unkey = Program.prototype.removeKey = function (\n  this: ProgramInterface,\n  key: string,\n  listener: Function\n): this {\n  if (typeof key === 'string') key = key.split(/\\s*,\\s*/);\n  key.forEach(function (key) {\n    return this.removeListener('key ' + key, listener);\n  }, this);\n};\n\n// XTerm mouse events\n// http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#Mouse%20Tracking\n// To better understand these\n// the xterm code is very helpful:\n// Relevant files:\n//   button.c, charproc.c, misc.c\n// Relevant functions in xterm/button.c:\n//   BtnCode, EmitButtonCode, EditorButton, SendMousePosition\n// send a mouse event:\n// regular/utf8: ^[[M Cb Cx Cy\n// urxvt: ^[[ Cb ; Cx ; Cy M\n// sgr: ^[[ Cb ; Cx ; Cy M/m\n// vt300: ^[[ 24(1/3/5)~ [ Cx , Cy ] \\r\n// locator: CSI P e ; P b ; P r ; P c ; P p & w\n// motion example of a left click:\n// ^[[M 3<^[[M@4<^[[M@5<^[[M@6<^[[M@7<^[[M#7<\n// mouseup, mousedown, mousewheel\n// left click: ^[[M 3<^[[M#3<\n// mousewheel up: ^[[M`3>\nProgram.prototype.bindMouse = function () {\n  if (this._boundMouse) return;\n  this._boundMouse = true;\n\n  var decoder = new StringDecoder('utf8'),\n    self = this;\n\n  this.on('data', function (data) {\n    var text = decoder.write(data);\n    if (!text) return;\n    self._bindMouse(text, data);\n  });\n};\n\nProgram.prototype._bindMouse = function (s, buf) {\n  var self = this,\n    key,\n    parts,\n    b,\n    x,\n    y,\n    mod,\n    params,\n    down,\n    page,\n    button;\n\n  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('utf-8');\n    } else {\n      s = s.toString('utf-8');\n    }\n  }\n\n  // if (this.8bit) {\n  //   s = s.replace(/\\233/g, '\\x1b[');\n  //   buf = new Buffer(s, 'utf8');\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  var bx = s.charCodeAt(4);\n  var by = s.charCodeAt(5);\n  if (\n    buf[0] === 0x1b &&\n    buf[1] === 0x5b &&\n    buf[2] === 0x4d &&\n    (this.isVTE ||\n      bx >= 65533 ||\n      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  ) {\n    b = buf[3];\n    x = buf[4];\n    y = buf[5];\n\n    // unsigned char overflow.\n    if (x < 0x20) x += 0xff;\n    if (y < 0x20) y += 0xff;\n\n    // Convert the coordinates into a\n    // properly formatted x10 utf8 sequence.\n    s =\n      '\\x1b[M' +\n      String.fromCharCode(b) +\n      String.fromCharCode(x) +\n      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 (this.zero) key.x--, key.y--;\n\n    if (x === 0) key.x = 255;\n    if (y === 0) key.y = 255;\n\n    mod = b >> 2;\n    key.shift = !!(mod & 1);\n    key.meta = !!((mod >> 1) & 1);\n    key.ctrl = !!((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 = this._lastButton || 'unknown';\n      delete this._lastButton;\n    } else {\n      key.action = 'mousedown';\n      button = b & 3;\n      key.button =\n        button === 0\n          ? 'left'\n          : button === 1\n            ? 'middle'\n            : button === 2\n              ? 'right'\n              : 'unknown';\n      this._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 (\n      b === 35 ||\n      b === 39 ||\n      b === 51 ||\n      b === 43 ||\n      (this.isVTE && (b === 32 || b === 36 || b === 48 || b === 40))\n    ) {\n      delete key.button;\n      key.action = 'mousemove';\n    }\n\n    self.emit('mouse', key);\n\n    return;\n  }\n\n  // URxvt\n  if ((parts = /^\\x1b\\[(\\d+;\\d+;\\d+)M/.exec(s))) {\n    params = parts[1].split(';');\n    b = +params[0];\n    x = +params[1];\n    y = +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 (this.zero) key.x--, key.y--;\n\n    mod = b >> 2;\n    key.shift = !!(mod & 1);\n    key.meta = !!((mod >> 1) & 1);\n    key.ctrl = !!((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) {\n      b = 67;\n    }\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 = this._lastButton || 'unknown';\n      delete this._lastButton;\n    } else {\n      key.action = 'mousedown';\n      button = b & 3;\n      key.button =\n        button === 0\n          ? 'left'\n          : button === 1\n            ? 'middle'\n            : button === 2\n              ? 'right'\n              : 'unknown';\n      // NOTE: 0/32 = mousemove, 32/64 = mousemove with left down\n      // if ((b >> 1) === 32)\n      this._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 (\n      b === 35 ||\n      b === 39 ||\n      b === 51 ||\n      b === 43 ||\n      (this.isVTE && (b === 32 || b === 36 || b === 48 || b === 40))\n    ) {\n      delete key.button;\n      key.action = 'mousemove';\n    }\n\n    self.emit('mouse', key);\n\n    return;\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 = +params[0];\n    x = +params[1];\n    y = +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 (this.zero) key.x--, key.y--;\n\n    mod = b >> 2;\n    key.shift = !!(mod & 1);\n    key.meta = !!((mod >> 1) & 1);\n    key.ctrl = !!((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 =\n        button === 0\n          ? 'left'\n          : button === 1\n            ? 'middle'\n            : button === 2\n              ? 'right'\n              : '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 (\n      b === 35 ||\n      b === 39 ||\n      b === 51 ||\n      b === 43 ||\n      (this.isVTE && (b === 32 || b === 36 || b === 48 || b === 40))\n    ) {\n      delete key.button;\n      key.action = 'mousemove';\n    }\n\n    self.emit('mouse', key);\n\n    return;\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 = +params[0];\n    x = +params[1];\n    y = +params[2];\n    page = +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 (this.zero) key.x--, key.y--;\n\n    key.action = b === 3 ? 'mouseup' : 'mousedown';\n\n    key.button =\n      b === 2 ? 'left' : b === 4 ? 'middle' : b === 6 ? 'right' : 'unknown';\n\n    self.emit('mouse', key);\n\n    return;\n  }\n\n  // vt300\n  if ((parts = /^\\x1b\\[24([0135])~\\[(\\d+),(\\d+)\\]\\r/.exec(s))) {\n    b = +parts[1];\n    x = +parts[2];\n    y = +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 (this.zero) key.x--, key.y--;\n\n    key.action = 'mousedown';\n    key.button =\n      b === 1 ? 'left' : b === 2 ? 'middle' : b === 5 ? 'right' : 'unknown';\n\n    self.emit('mouse', key);\n\n    return;\n  }\n\n  if ((parts = /^\\x1b\\[(O|I)/.exec(s))) {\n    key.action = parts[1] === 'I' ? 'focus' : 'blur';\n\n    self.emit('mouse', key);\n    self.emit(key.action);\n\n    return;\n  }\n};\n\n// gpm support for linux vc\nProgram.prototype.enableGpm = function () {\n  var self = this;\n  var gpmclient = require('./gpmclient');\n\n  if (this.gpm) return;\n\n  this.gpm = gpmclient();\n\n  this.gpm.on('btndown', function (btn, modifier, x, y) {\n    x--, y--;\n\n    var key = {\n      name: 'mouse',\n      type: 'GPM',\n      action: 'mousedown',\n      button: self.gpm.ButtonName(btn),\n      raw: [btn, modifier, x, y],\n      x: x,\n      y: y,\n      shift: self.gpm.hasShiftKey(modifier),\n      meta: self.gpm.hasMetaKey(modifier),\n      ctrl: self.gpm.hasCtrlKey(modifier),\n    };\n\n    self.emit('mouse', key);\n  });\n\n  this.gpm.on('btnup', function (btn, modifier, x, y) {\n    x--, y--;\n\n    var key = {\n      name: 'mouse',\n      type: 'GPM',\n      action: 'mouseup',\n      button: self.gpm.ButtonName(btn),\n      raw: [btn, modifier, x, y],\n      x: x,\n      y: y,\n      shift: self.gpm.hasShiftKey(modifier),\n      meta: self.gpm.hasMetaKey(modifier),\n      ctrl: self.gpm.hasCtrlKey(modifier),\n    };\n\n    self.emit('mouse', key);\n  });\n\n  this.gpm.on('move', function (btn, modifier, x, y) {\n    x--, y--;\n\n    var key = {\n      name: 'mouse',\n      type: 'GPM',\n      action: 'mousemove',\n      button: self.gpm.ButtonName(btn),\n      raw: [btn, modifier, x, y],\n      x: x,\n      y: y,\n      shift: self.gpm.hasShiftKey(modifier),\n      meta: self.gpm.hasMetaKey(modifier),\n      ctrl: self.gpm.hasCtrlKey(modifier),\n    };\n\n    self.emit('mouse', key);\n  });\n\n  this.gpm.on('drag', function (btn, modifier, x, y) {\n    x--, y--;\n\n    var key = {\n      name: 'mouse',\n      type: 'GPM',\n      action: 'mousemove',\n      button: self.gpm.ButtonName(btn),\n      raw: [btn, modifier, x, y],\n      x: x,\n      y: y,\n      shift: self.gpm.hasShiftKey(modifier),\n      meta: self.gpm.hasMetaKey(modifier),\n      ctrl: self.gpm.hasCtrlKey(modifier),\n    };\n\n    self.emit('mouse', key);\n  });\n\n  this.gpm.on('mousewheel', function (btn, modifier, x, y, dx, dy) {\n    var key = {\n      name: 'mouse',\n      type: 'GPM',\n      action: dy > 0 ? 'wheelup' : 'wheeldown',\n      button: self.gpm.ButtonName(btn),\n      raw: [btn, modifier, x, y, dx, dy],\n      x: x,\n      y: y,\n      shift: self.gpm.hasShiftKey(modifier),\n      meta: self.gpm.hasMetaKey(modifier),\n      ctrl: self.gpm.hasCtrlKey(modifier),\n    };\n\n    self.emit('mouse', key);\n  });\n};\n\nProgram.prototype.disableGpm = function () {\n  if (this.gpm) {\n    this.gpm.stop();\n    delete this.gpm;\n  }\n};\n\n// All possible responses from the terminal\nProgram.prototype.bindResponse = function () {\n  if (this._boundResponse) return;\n  this._boundResponse = true;\n\n  var decoder = new StringDecoder('utf8'),\n    self = this;\n\n  this.on('data', function (data) {\n    data = decoder.write(data);\n    if (!data) return;\n    self._bindResponse(data);\n  });\n};\n\nProgram.prototype._bindResponse = function (s) {\n  var out = {},\n    parts;\n\n  if (Buffer.isBuffer(s)) {\n    if (s[0] > 127 && s[1] === undefined) {\n      s[0] -= 128;\n      s = '\\x1b' + s.toString('utf-8');\n    } else {\n      s = s.toString('utf-8');\n    }\n  }\n\n  // CSI P s c\n  // Send Device Attributes (Primary DA).\n  // CSI > P s c\n  // Send Device Attributes (Secondary DA).\n  if ((parts = /^\\x1b\\[(\\?|>)(\\d*(?:;\\d*)*)c/.exec(s))) {\n    parts = parts[2].split(';').map(function (ch) {\n      return +ch || 0;\n    });\n\n    out.event = 'device-attributes';\n    out.code = 'DA';\n\n    if (parts[1] === '?') {\n      out.type = 'primary-attribute';\n      // VT100-style params:\n      if (parts[0] === 1 && parts[2] === 2) {\n        out.term = 'vt100';\n        out.advancedVideo = true;\n      } else if (parts[0] === 1 && parts[2] === 0) {\n        out.term = 'vt101';\n      } else if (parts[0] === 6) {\n        out.term = 'vt102';\n      } else if (\n        parts[0] === 60 &&\n        parts[1] === 1 &&\n        parts[2] === 2 &&\n        parts[3] === 6 &&\n        parts[4] === 8 &&\n        parts[5] === 9 &&\n        parts[6] === 15\n      ) {\n        out.term = 'vt220';\n      } else {\n        // VT200-style params:\n        parts.forEach(function (attr) {\n          switch (attr) {\n            case 1:\n              out.cols132 = true;\n              break;\n            case 2:\n              out.printer = true;\n              break;\n            case 6:\n              out.selectiveErase = true;\n              break;\n            case 8:\n              out.userDefinedKeys = true;\n              break;\n            case 9:\n              out.nationalReplacementCharsets = true;\n              break;\n            case 15:\n              out.technicalCharacters = true;\n              break;\n            case 18:\n              out.userWindows = true;\n              break;\n            case 21:\n              out.horizontalScrolling = true;\n              break;\n            case 22:\n              out.ansiColor = true;\n              break;\n            case 29:\n              out.ansiTextLocator = true;\n              break;\n          }\n        });\n      }\n    } else {\n      out.type = 'secondary-attribute';\n      switch (parts[0]) {\n        case 0:\n          out.term = 'vt100';\n          break;\n        case 1:\n          out.term = 'vt220';\n          break;\n        case 2:\n          out.term = 'vt240';\n          break;\n        case 18:\n          out.term = 'vt330';\n          break;\n        case 19:\n          out.term = 'vt340';\n          break;\n        case 24:\n          out.term = 'vt320';\n          break;\n        case 41:\n          out.term = 'vt420';\n          break;\n        case 61:\n          out.term = 'vt510';\n          break;\n        case 64:\n          out.term = 'vt520';\n          break;\n        case 65:\n          out.term = 'vt525';\n          break;\n      }\n      out.firmwareVersion = parts[1];\n      out.romCartridgeRegistrationNumber = parts[2];\n    }\n\n    // LEGACY\n    out.deviceAttributes = out;\n\n    this.emit('response', out);\n    this.emit('response ' + out.event, out);\n\n    return;\n  }\n\n  // CSI Ps n  Device Status Report (DSR).\n  //     Ps = 5  -> Status Report.  Result (``OK'') is\n  //   CSI 0 n\n  // CSI ? Ps n\n  //   Device Status Report (DSR, DEC-specific).\n  //     Ps = 1 5  -> Report Printer status as CSI ? 1 0  n  (ready).\n  //     or CSI ? 1 1  n  (not ready).\n  //     Ps = 2 5  -> Report UDK status as CSI ? 2 0  n  (unlocked)\n  //     or CSI ? 2 1  n  (locked).\n  //     Ps = 2 6  -> Report Keyboard status as\n  //   CSI ? 2 7  ;  1  ;  0  ;  0  n  (North American).\n  //   The last two parameters apply to VT400 & up, and denote key-\n  //   board ready and LK01 respectively.\n  //     Ps = 5 3  -> Report Locator status as\n  //   CSI ? 5 3  n  Locator available, if compiled-in, or\n  //   CSI ? 5 0  n  No Locator, if not.\n  if ((parts = /^\\x1b\\[(\\?)?(\\d+)(?:;(\\d+);(\\d+);(\\d+))?n/.exec(s))) {\n    out.event = 'device-status';\n    out.code = 'DSR';\n\n    if (!parts[1] && parts[2] === '0' && !parts[3]) {\n      out.type = 'device-status';\n      out.status = 'OK';\n\n      // LEGACY\n      out.deviceStatus = out.status;\n\n      this.emit('response', out);\n      this.emit('response ' + out.event, out);\n\n      return;\n    }\n\n    if (parts[1] && (parts[2] === '10' || parts[2] === '11') && !parts[3]) {\n      out.type = 'printer-status';\n      out.status = parts[2] === '10' ? 'ready' : 'not ready';\n\n      // LEGACY\n      out.printerStatus = out.status;\n\n      this.emit('response', out);\n      this.emit('response ' + out.event, out);\n\n      return;\n    }\n\n    if (parts[1] && (parts[2] === '20' || parts[2] === '21') && !parts[3]) {\n      out.type = 'udk-status';\n      out.status = parts[2] === '20' ? 'unlocked' : 'locked';\n\n      // LEGACY\n      out.UDKStatus = out.status;\n\n      this.emit('response', out);\n      this.emit('response ' + out.event, out);\n\n      return;\n    }\n\n    if (\n      parts[1] &&\n      parts[2] === '27' &&\n      parts[3] === '1' &&\n      parts[4] === '0' &&\n      parts[5] === '0'\n    ) {\n      out.type = 'keyboard-status';\n      out.status = 'OK';\n\n      // LEGACY\n      out.keyboardStatus = out.status;\n\n      this.emit('response', out);\n      this.emit('response ' + out.event, out);\n\n      return;\n    }\n\n    if (parts[1] && (parts[2] === '53' || parts[2] === '50') && !parts[3]) {\n      out.type = 'locator-status';\n      out.status = parts[2] === '53' ? 'available' : 'unavailable';\n\n      // LEGACY\n      out.locator = out.status;\n\n      this.emit('response', out);\n      this.emit('response ' + out.event, out);\n\n      return;\n    }\n\n    out.type = 'error';\n    out.text = 'Unhandled: ' + JSON.stringify(parts);\n\n    // LEGACY\n    out.error = out.text;\n\n    this.emit('response', out);\n    this.emit('response ' + out.event, out);\n\n    return;\n  }\n\n  // CSI Ps n  Device Status Report (DSR).\n  //     Ps = 6  -> Report Cursor Position (CPR) [row;column].\n  //   Result is\n  //   CSI r ; c R\n  // CSI ? Ps n\n  //   Device Status Report (DSR, DEC-specific).\n  //     Ps = 6  -> Report Cursor Position (CPR) [row;column] as CSI\n  //     ? r ; c R (assumes page is zero).\n  if ((parts = /^\\x1b\\[(\\?)?(\\d+);(\\d+)R/.exec(s))) {\n    out.event = 'device-status';\n    out.code = 'DSR';\n    out.type = 'cursor-status';\n\n    out.status = {\n      x: +parts[3],\n      y: +parts[2],\n      page: !parts[1] ? undefined : 0,\n    };\n\n    out.x = out.status.x;\n    out.y = out.status.y;\n    out.page = out.status.page;\n\n    // LEGACY\n    out.cursor = out.status;\n\n    this.emit('response', out);\n    this.emit('response ' + out.event, out);\n\n    return;\n  }\n\n  // CSI Ps ; Ps ; Ps t\n  //   Window manipulation (from dtterm, as well as extensions).\n  //   These controls may be disabled using the allowWindowOps\n  //   resource.  Valid values for the first (and any additional\n  //   parameters) are:\n  //     Ps = 1 1  -> Report xterm window state.  If the xterm window\n  //     is open (non-iconified), it returns CSI 1 t .  If the xterm\n  //     window is iconified, it returns CSI 2 t .\n  //     Ps = 1 3  -> Report xterm window position.  Result is CSI 3\n  //     ; x ; y t\n  //     Ps = 1 4  -> Report xterm window in pixels.  Result is CSI\n  //     4  ;  height ;  width t\n  //     Ps = 1 8  -> Report the size of the text area in characters.\n  //     Result is CSI  8  ;  height ;  width t\n  //     Ps = 1 9  -> Report the size of the screen in characters.\n  //     Result is CSI  9  ;  height ;  width t\n  if ((parts = /^\\x1b\\[(\\d+)(?:;(\\d+);(\\d+))?t/.exec(s))) {\n    out.event = 'window-manipulation';\n    out.code = '';\n\n    if ((parts[1] === '1' || parts[1] === '2') && !parts[2]) {\n      out.type = 'window-state';\n      out.state = parts[1] === '1' ? 'non-iconified' : 'iconified';\n\n      // LEGACY\n      out.windowState = out.state;\n\n      this.emit('response', out);\n      this.emit('response ' + out.event, out);\n\n      return;\n    }\n\n    if (parts[1] === '3' && parts[2]) {\n      out.type = 'window-position';\n\n      out.position = {\n        x: +parts[2],\n        y: +parts[3],\n      };\n      out.x = out.position.x;\n      out.y = out.position.y;\n\n      // LEGACY\n      out.windowPosition = out.position;\n\n      this.emit('response', out);\n      this.emit('response ' + out.event, out);\n\n      return;\n    }\n\n    if (parts[1] === '4' && parts[2]) {\n      out.type = 'window-size-pixels';\n      out.size = {\n        height: +parts[2],\n        width: +parts[3],\n      };\n      out.height = out.size.height;\n      out.width = out.size.width;\n\n      // LEGACY\n      out.windowSizePixels = out.size;\n\n      this.emit('response', out);\n      this.emit('response ' + out.event, out);\n\n      return;\n    }\n\n    if (parts[1] === '8' && parts[2]) {\n      out.type = 'textarea-size';\n      out.size = {\n        height: +parts[2],\n        width: +parts[3],\n      };\n      out.height = out.size.height;\n      out.width = out.size.width;\n\n      // LEGACY\n      out.textAreaSizeCharacters = out.size;\n\n      this.emit('response', out);\n      this.emit('response ' + out.event, out);\n\n      return;\n    }\n\n    if (parts[1] === '9' && parts[2]) {\n      out.type = 'screen-size';\n      out.size = {\n        height: +parts[2],\n        width: +parts[3],\n      };\n      out.height = out.size.height;\n      out.width = out.size.width;\n\n      // LEGACY\n      out.screenSizeCharacters = out.size;\n\n      this.emit('response', out);\n      this.emit('response ' + out.event, out);\n\n      return;\n    }\n\n    out.type = 'error';\n    out.text = 'Unhandled: ' + JSON.stringify(parts);\n\n    // LEGACY\n    out.error = out.text;\n\n    this.emit('response', out);\n    this.emit('response ' + out.event, out);\n\n    return;\n  }\n\n  // rxvt-unicode does not support window manipulation\n  //   Result Normal: OSC l/L 0xEF 0xBF 0xBD\n  //   Result ASCII: OSC l/L 0x1c (file separator)\n  //   Result UTF8->ASCII: OSC l/L 0xFD\n  // Test with:\n  //   echo -ne '\\ePtmux;\\e\\e[>3t\\e\\\\'\n  //   sleep 2 && echo -ne '\\ePtmux;\\e\\e[21t\\e\\\\' & cat -v\n  //   -\n  //   echo -ne '\\e[>3t'\n  //   sleep 2 && echo -ne '\\e[21t' & cat -v\n  if ((parts = /^\\x1b\\](l|L)([^\\x07\\x1b]*)$/.exec(s))) {\n    parts[2] = 'rxvt';\n    s = '\\x1b]' + parts[1] + parts[2] + '\\x1b\\\\';\n  }\n\n  // CSI Ps ; Ps ; Ps t\n  //   Window manipulation (from dtterm, as well as extensions).\n  //   These controls may be disabled using the allowWindowOps\n  //   resource.  Valid values for the first (and any additional\n  //   parameters) are:\n  //     Ps = 2 0  -> Report xterm window's icon label.  Result is\n  //     OSC  L  label ST\n  //     Ps = 2 1  -> Report xterm window's title.  Result is OSC  l\n  //     label ST\n  if ((parts = /^\\x1b\\](l|L)([^\\x07\\x1b]*)(?:\\x07|\\x1b\\\\)/.exec(s))) {\n    out.event = 'window-manipulation';\n    out.code = '';\n\n    if (parts[1] === 'L') {\n      out.type = 'window-icon-label';\n      out.text = parts[2];\n\n      // LEGACY\n      out.windowIconLabel = out.text;\n\n      this.emit('response', out);\n      this.emit('response ' + out.event, out);\n\n      return;\n    }\n\n    if (parts[1] === 'l') {\n      out.type = 'window-title';\n      out.text = parts[2];\n\n      // LEGACY\n      out.windowTitle = out.text;\n\n      this.emit('response', out);\n      this.emit('response ' + out.event, out);\n\n      return;\n    }\n\n    out.type = 'error';\n    out.text = 'Unhandled: ' + JSON.stringify(parts);\n\n    // LEGACY\n    out.error = out.text;\n\n    this.emit('response', out);\n    this.emit('response ' + out.event, out);\n\n    return;\n  }\n\n  // CSI Ps ' |\n  //   Request Locator Position (DECRQLP).\n  //     -> CSI Pe ; Pb ; Pr ; Pc ; Pp &  w\n  //   Parameters are [event;button;row;column;page].\n  //   Valid values for the event:\n  //     Pe = 0  -> locator unavailable - no other parameters sent.\n  //     Pe = 1  -> request - xterm received a DECRQLP.\n  //     Pe = 2  -> left button down.\n  //     Pe = 3  -> left button up.\n  //     Pe = 4  -> middle button down.\n  //     Pe = 5  -> middle button up.\n  //     Pe = 6  -> right button down.\n  //     Pe = 7  -> right button up.\n  //     Pe = 8  -> M4 button down.\n  //     Pe = 9  -> M4 button up.\n  //     Pe = 1 0  -> locator outside filter rectangle.\n  //   ``button'' parameter is a bitmask indicating which buttons are\n  //     pressed:\n  //     Pb = 0  <- no buttons down.\n  //     Pb & 1  <- right button down.\n  //     Pb & 2  <- middle button down.\n  //     Pb & 4  <- left button down.\n  //     Pb & 8  <- M4 button down.\n  //   ``row'' and ``column'' parameters are the coordinates of the\n  //     locator position in the xterm window, encoded as ASCII deci-\n  //     mal.\n  //   The ``page'' parameter is not used by xterm, and will be omit-\n  //   ted.\n  // NOTE:\n  // This is already implemented in the _bindMouse\n  // method, but it might make more sense here.\n  // The xterm mouse documentation says there is a\n  // `<` prefix, the DECRQLP says there is no prefix.\n  if ((parts = /^\\x1b\\[(\\d+(?:;\\d+){4})&w/.exec(s))) {\n    parts = parts[1].split(';').map(function (ch) {\n      return +ch;\n    });\n\n    out.event = 'locator-position';\n    out.code = 'DECRQLP';\n\n    switch (parts[0]) {\n      case 0:\n        out.status = 'locator-unavailable';\n        break;\n      case 1:\n        out.status = 'request';\n        break;\n      case 2:\n        out.status = 'left-button-down';\n        break;\n      case 3:\n        out.status = 'left-button-up';\n        break;\n      case 4:\n        out.status = 'middle-button-down';\n        break;\n      case 5:\n        out.status = 'middle-button-up';\n        break;\n      case 6:\n        out.status = 'right-button-down';\n        break;\n      case 7:\n        out.status = 'right-button-up';\n        break;\n      case 8:\n        out.status = 'm4-button-down';\n        break;\n      case 9:\n        out.status = 'm4-button-up';\n        break;\n      case 10:\n        out.status = 'locator-outside';\n        break;\n    }\n\n    out.mask = parts[1];\n    out.row = parts[2];\n    out.col = parts[3];\n    out.page = parts[4];\n\n    // LEGACY\n    out.locatorPosition = out;\n\n    this.emit('response', out);\n    this.emit('response ' + out.event, out);\n\n    return;\n  }\n\n  // OSC Ps ; Pt BEL\n  // OSC Ps ; Pt ST\n  // Set Text Parameters\n  if ((parts = /^\\x1b\\](\\d+);([^\\x07\\x1b]+)(?:\\x07|\\x1b\\\\)/.exec(s))) {\n    out.event = 'text-params';\n    out.code = 'Set Text Parameters';\n    out.ps = +s[1];\n    out.pt = s[2];\n    this.emit('response', out);\n    this.emit('response ' + out.event, out);\n  }\n};\n\nProgram.prototype.response = function (name, text, callback, noBypass) {\n  var self = this;\n\n  if (arguments.length === 2) {\n    callback = text;\n    text = name;\n    name = null;\n  }\n\n  if (!callback) {\n    callback = function () {};\n  }\n\n  this.bindResponse();\n\n  name = name ? 'response ' + name : 'response';\n\n  var onresponse;\n\n  this.once(\n    name,\n    (onresponse = function (event) {\n      if (timeout) clearTimeout(timeout);\n      if (event.type === 'error') {\n        return callback(new Error(event.event + ': ' + event.text));\n      }\n      return callback(null, event);\n    })\n  );\n\n  var timeout = setTimeout(function () {\n    self.removeListener(name, onresponse);\n    return callback(new Error('Timeout.'));\n  }, 2000);\n\n  return noBypass ? this._write(text) : this._twrite(text);\n};\n\nProgram.prototype._owrite = Program.prototype.write = function (text) {\n  if (!this.output.writable) return;\n  return this.output.write(text);\n};\n\nProgram.prototype._buffer = function (text) {\n  if (this._exiting) {\n    this.flush();\n    this._owrite(text);\n    return;\n  }\n\n  if (this._buf) {\n    this._buf += text;\n    return;\n  }\n\n  this._buf = text;\n\n  nextTick(this._flush);\n\n  return true;\n};\n\nProgram.prototype.flush = function (this: ProgramInterface): void {\n  if (!this._buf) return;\n  this._owrite(this._buf);\n  this._buf = '';\n};\n\nProgram.prototype._write = function (\n  this: ProgramInterface,\n  text: string\n): boolean {\n  if (this.ret) return text;\n  if (this.useBuffer) {\n    return this._buffer(text);\n  }\n  return this._owrite(text);\n};\n\n// Example: `DCS tmux; ESC Pt ST`\n// Real: `DCS tmux; ESC Pt ESC \\`\nProgram.prototype._twrite = function (data) {\n  var self = this,\n    iterations = 0,\n    timer;\n\n  if (this.tmux) {\n    // Replace all STs with BELs so they can be nested within the DCS code.\n    data = data.replace(/\\x1b\\\\/g, '\\x07');\n\n    // Wrap in tmux forward DCS:\n    data = '\\x1bPtmux;\\x1b' + data + '\\x1b\\\\';\n\n    // If we've never even flushed yet, it means we're still in\n    // the normal buffer. Wait for alt screen buffer.\n    if (this.output.bytesWritten === 0) {\n      timer = setInterval(function () {\n        if (self.output.bytesWritten > 0 || ++iterations === 50) {\n          clearInterval(timer);\n          self.flush();\n          self._owrite(data);\n        }\n      }, 100);\n      return true;\n    }\n\n    // NOTE: Flushing the buffer is required in some cases.\n    // The DCS code must be at the start of the output.\n    this.flush();\n\n    // Write out raw now that the buffer is flushed.\n    return this._owrite(data);\n  }\n\n  return this._write(data);\n};\n\nProgram.prototype.echo = Program.prototype.print = function (text, attr) {\n  return attr ? this._write(this.text(text, attr)) : this._write(text);\n};\n\nProgram.prototype._ncoords = function () {\n  if (this.x < 0) this.x = 0;\n  else if (this.x >= this.cols) this.x = this.cols - 1;\n  if (this.y < 0) this.y = 0;\n  else if (this.y >= this.rows) this.y = this.rows - 1;\n};\n\nProgram.prototype.setx = function (x) {\n  return this.cursorCharAbsolute(x);\n  // return this.charPosAbsolute(x);\n};\n\nProgram.prototype.sety = function (y) {\n  return this.linePosAbsolute(y);\n};\n\nProgram.prototype.move = function (x, y) {\n  return this.cursorPos(y, x);\n};\n\n// TODO: Fix cud and cuu calls.\nProgram.prototype.omove = function (x, y) {\n  if (!this.zero) {\n    x = (x || 1) - 1;\n    y = (y || 1) - 1;\n  } else {\n    x = x || 0;\n    y = y || 0;\n  }\n  if (y === this.y && x === this.x) {\n    return;\n  }\n  if (y === this.y) {\n    if (x > this.x) {\n      this.cuf(x - this.x);\n    } else if (x < this.x) {\n      this.cub(this.x - x);\n    }\n  } else if (x === this.x) {\n    if (y > this.y) {\n      this.cud(y - this.y);\n    } else if (y < this.y) {\n      this.cuu(this.y - y);\n    }\n  } else {\n    if (!this.zero) x++, y++;\n    this.cup(y, x);\n  }\n};\n\nProgram.prototype.rsetx = function (x) {\n  // return this.HPositionRelative(x);\n  if (!x) return;\n  return x > 0 ? this.forward(x) : this.back(-x);\n};\n\nProgram.prototype.rsety = function (y) {\n  // return this.VPositionRelative(y);\n  if (!y) return;\n  return y > 0 ? this.up(y) : this.down(-y);\n};\n\nProgram.prototype.rmove = function (x, y) {\n  this.rsetx(x);\n  this.rsety(y);\n};\n\nProgram.prototype.simpleInsert = function (ch, i, attr) {\n  return this._write(this.repeat(ch, i), attr);\n};\n\nProgram.prototype.repeat = function (ch, i) {\n  if (!i || i < 0) i = 0;\n  return Array(i + 1).join(ch);\n};\n\nProgram.prototype.__defineGetter__('title', function () {\n  return this._title;\n});\n\nProgram.prototype.__defineSetter__('title', function (title) {\n  this.setTitle(title);\n  return this._title;\n});\n\n// Specific to iTerm2, but I think it's really cool.\n// Example:\n//  if (!screen.copyToClipboard(text)) {\n//    execClipboardProgram(text);\n//  }\nProgram.prototype.copyToClipboard = function (text) {\n  if (this.isiTerm2) {\n    this._twrite('\\x1b]50;CopyToCliboard=' + text + '\\x07');\n    return true;\n  }\n  return false;\n};\n\n// Only XTerm and iTerm2. If you know of any others, post them.\nProgram.prototype.cursorShape = function (shape, blink) {\n  if (this.isiTerm2) {\n    switch (shape) {\n      case 'block':\n        if (!blink) {\n          this._twrite('\\x1b]50;CursorShape=0;BlinkingCursorEnabled=0\\x07');\n        } else {\n          this._twrite('\\x1b]50;CursorShape=0;BlinkingCursorEnabled=1\\x07');\n        }\n        break;\n      case 'underline':\n        if (!blink) {\n          // this._twrite('\\x1b]50;CursorShape=n;BlinkingCursorEnabled=0\\x07');\n        } else {\n          // this._twrite('\\x1b]50;CursorShape=n;BlinkingCursorEnabled=1\\x07');\n        }\n        break;\n      case 'line':\n        if (!blink) {\n          this._twrite('\\x1b]50;CursorShape=1;BlinkingCursorEnabled=0\\x07');\n        } else {\n          this._twrite('\\x1b]50;CursorShape=1;BlinkingCursorEnabled=1\\x07');\n        }\n        break;\n    }\n    return true;\n  } else if (this.term('xterm') || this.term('screen')) {\n    switch (shape) {\n      case 'block':\n        if (!blink) {\n          this._twrite('\\x1b[0 q');\n        } else {\n          this._twrite('\\x1b[1 q');\n        }\n        break;\n      case 'underline':\n        if (!blink) {\n          this._twrite('\\x1b[2 q');\n        } else {\n          this._twrite('\\x1b[3 q');\n        }\n        break;\n      case 'line':\n        if (!blink) {\n          this._twrite('\\x1b[4 q');\n        } else {\n          this._twrite('\\x1b[5 q');\n        }\n        break;\n    }\n    return true;\n  }\n  return false;\n};\n\nProgram.prototype.cursorColor = function (color) {\n  if (this.term('xterm') || this.term('rxvt') || this.term('screen')) {\n    this._twrite('\\x1b]12;' + color + '\\x07');\n    return true;\n  }\n  return false;\n};\n\nProgram.prototype.cursorReset = Program.prototype.resetCursor = function () {\n  if (this.term('xterm') || this.term('rxvt') || this.term('screen')) {\n    // XXX\n    // return this.resetColors();\n    this._twrite('\\x1b[0 q');\n    this._twrite('\\x1b]112\\x07');\n    // urxvt doesnt support OSC 112\n    this._twrite('\\x1b]12;white\\x07');\n    return true;\n  }\n  return false;\n};\n\nProgram.prototype.getTextParams = function (param, callback) {\n  return this.response(\n    'text-params',\n    '\\x1b]' + param + ';?\\x07',\n    function (err, data) {\n      if (err) return callback(err);\n      return callback(null, data.pt);\n    }\n  );\n};\n\nProgram.prototype.getCursorColor = function (callback) {\n  return this.getTextParams(12, callback);\n};\n\n/**\n * Normal\n */\n\n//Program.prototype.pad =\nProgram.prototype.nul = function () {\n  //if (this.has('pad')) return this.put.pad();\n  return this._write('\\x80');\n};\n\nProgram.prototype.bel = Program.prototype.bell = function () {\n  if (this.has('bel')) return this.put.bel();\n  return this._write('\\x07');\n};\n\nProgram.prototype.vtab = function () {\n  this.y++;\n  this._ncoords();\n  return this._write('\\x0b');\n};\n\nProgram.prototype.ff = Program.prototype.form = function () {\n  if (this.has('ff')) return this.put.ff();\n  return this._write('\\x0c');\n};\n\nProgram.prototype.kbs = Program.prototype.backspace = function () {\n  this.x--;\n  this._ncoords();\n  if (this.has('kbs')) return this.put.kbs();\n  return this._write('\\x08');\n};\n\nProgram.prototype.ht = Program.prototype.tab = function () {\n  this.x += 8;\n  this._ncoords();\n  if (this.has('ht')) return this.put.ht();\n  return this._write('\\t');\n};\n\nProgram.prototype.shiftOut = function () {\n  // if (this.has('S2')) return this.put.S2();\n  return this._write('\\x0e');\n};\n\nProgram.prototype.shiftIn = function () {\n  // if (this.has('S3')) return this.put.S3();\n  return this._write('\\x0f');\n};\n\nProgram.prototype.cr = Program.prototype.return = function () {\n  this.x = 0;\n  if (this.has('cr')) return this.put.cr();\n  return this._write('\\r');\n};\n\nProgram.prototype.nel =\n  Program.prototype.newline =\n  Program.prototype.feed =\n    function () {\n      if (\n        this.tput &&\n        this.tput.bools.eat_newline_glitch &&\n        this.x >= this.cols\n      ) {\n        return;\n      }\n      this.x = 0;\n      this.y++;\n      this._ncoords();\n      if (this.has('nel')) return this.put.nel();\n      return this._write('\\n');\n    };\n\n/**\n * Esc\n */\n\n// ESC D Index (IND is 0x84).\nProgram.prototype.ind = Program.prototype.index = function () {\n  this.y++;\n  this._ncoords();\n  if (this.tput) return this.put.ind();\n  return this._write('\\x1bD');\n};\n\n// ESC M Reverse Index (RI is 0x8d).\nProgram.prototype.ri =\n  Program.prototype.reverse =\n  Program.prototype.reverseIndex =\n    function () {\n      this.y--;\n      this._ncoords();\n      if (this.tput) return this.put.ri();\n      return this._write('\\x1bM');\n    };\n\n// ESC E Next Line (NEL is 0x85).\nProgram.prototype.nextLine = function () {\n  this.y++;\n  this.x = 0;\n  this._ncoords();\n  if (this.has('nel')) return this.put.nel();\n  return this._write('\\x1bE');\n};\n\n// ESC c Full Reset (RIS).\nProgram.prototype.reset = function (this: ProgramInterface): void {\n  this.x = this.y = 0;\n  if (this.has('rs1') || this.has('ris')) {\n    return this.has('rs1') ? this.put.rs1() : this.put.ris();\n  }\n  return this._write('\\x1bc');\n};\n\n// ESC H Tab Set (HTS is 0x88).\nProgram.prototype.tabSet = function () {\n  if (this.tput) return this.put.hts();\n  return this._write('\\x1bH');\n};\n\n// ESC 7 Save Cursor (DECSC).\nProgram.prototype.sc = Program.prototype.saveCursor = function (key) {\n  if (key) return this.lsaveCursor(key);\n  this.savedX = this.x || 0;\n  this.savedY = this.y || 0;\n  if (this.tput) return this.put.sc();\n  return this._write('\\x1b7');\n};\n\n// ESC 8 Restore Cursor (DECRC).\nProgram.prototype.rc = Program.prototype.restoreCursor = function (key, hide) {\n  if (key) return this.lrestoreCursor(key, hide);\n  this.x = this.savedX || 0;\n  this.y = this.savedY || 0;\n  if (this.tput) return this.put.rc();\n  return this._write('\\x1b8');\n};\n\n// Save Cursor Locally\nProgram.prototype.lsaveCursor = function (key) {\n  key = key || 'local';\n  this._saved = this._saved || {};\n  this._saved[key] = this._saved[key] || {};\n  this._saved[key].x = this.x;\n  this._saved[key].y = this.y;\n  this._saved[key].hidden = this.cursorHidden;\n};\n\n// Restore Cursor Locally\nProgram.prototype.lrestoreCursor = function (key, hide) {\n  var pos;\n  key = key || 'local';\n  if (!this._saved || !this._saved[key]) return;\n  pos = this._saved[key];\n  //delete this._saved[key];\n  this.cup(pos.y, pos.x);\n  if (hide && pos.hidden !== this.cursorHidden) {\n    if (pos.hidden) {\n      this.hideCursor();\n    } else {\n      this.showCursor();\n    }\n  }\n};\n\n// ESC # 3 DEC line height/width\nProgram.prototype.lineHeight = function () {\n  return this._write('\\x1b#');\n};\n\n// ESC (,),*,+,-,. Designate G0-G2 Character Set.\nProgram.prototype.charset = function (val, level) {\n  level = level || 0;\n\n  // See also:\n  // acs_chars / acsc / ac\n  // enter_alt_charset_mode / smacs / as\n  // exit_alt_charset_mode / rmacs / ae\n  // enter_pc_charset_mode / smpch / S2\n  // exit_pc_charset_mode / rmpch / S3\n\n  switch (level) {\n    case 0:\n      level = '(';\n      break;\n    case 1:\n      level = ')';\n      break;\n    case 2:\n      level = '*';\n      break;\n    case 3:\n      level = '+';\n      break;\n  }\n\n  var name = typeof val === 'string' ? val.toLowerCase() : val;\n\n  switch (name) {\n    case 'acs':\n    case 'scld': // DEC Special Character and Line Drawing Set.\n      if (this.tput) return this.put.smacs();\n      val = '0';\n      break;\n    case 'uk': // UK\n      val = 'A';\n      break;\n    case 'us': // United States (USASCII).\n    case 'usascii':\n    case 'ascii':\n      if (this.tput) return this.put.rmacs();\n      val = 'B';\n      break;\n    case 'dutch': // Dutch\n      val = '4';\n      break;\n    case 'finnish': // Finnish\n      val = 'C';\n      val = '5';\n      break;\n    case 'french': // French\n      val = 'R';\n      break;\n    case 'frenchcanadian': // FrenchCanadian\n      val = 'Q';\n      break;\n    case 'german': // German\n      val = 'K';\n      break;\n    case 'italian': // Italian\n      val = 'Y';\n      break;\n    case 'norwegiandanish': // NorwegianDanish\n      val = 'E';\n      val = '6';\n      break;\n    case 'spanish': // Spanish\n      val = 'Z';\n      break;\n    case 'swedish': // Swedish\n      val = 'H';\n      val = '7';\n      break;\n    case 'swiss': // Swiss\n      val = '=';\n      break;\n    case 'isolatin': // ISOLatin (actually /A)\n      val = '/A';\n      break;\n    default: // Default\n      if (this.tput) return this.put.rmacs();\n      val = 'B';\n      break;\n  }\n\n  return this._write('\\x1b(' + val);\n};\n\nProgram.prototype.enter_alt_charset_mode =\n  Program.prototype.as =\n  Program.prototype.smacs =\n    function () {\n      return this.charset('acs');\n    };\n\nProgram.prototype.exit_alt_charset_mode =\n  Program.prototype.ae =\n  Program.prototype.rmacs =\n    function () {\n      return this.charset('ascii');\n    };\n\n// ESC N\n// Single Shift Select of G2 Character Set\n// ( SS2 is 0x8e). This affects next character only.\n// ESC O\n// Single Shift Select of G3 Character Set\n// ( SS3 is 0x8f). This affects next character only.\n// ESC n\n// Invoke the G2 Character Set as GL (LS2).\n// ESC o\n// Invoke the G3 Character Set as GL (LS3).\n// ESC |\n// Invoke the G3 Character Set as GR (LS3R).\n// ESC }\n// Invoke the G2 Character Set as GR (LS2R).\n// ESC ~\n// Invoke the G1 Character Set as GR (LS1R).\nProgram.prototype.setG = function (val) {\n  // if (this.tput) return this.put.S2();\n  // if (this.tput) return this.put.S3();\n  switch (val) {\n    case 1:\n      val = '~'; // GR\n      break;\n    case 2:\n      val = 'n'; // GL\n      val = '}'; // GR\n      val = 'N'; // Next Char Only\n      break;\n    case 3:\n      val = 'o'; // GL\n      val = '|'; // GR\n      val = 'O'; // Next Char Only\n      break;\n  }\n  return this._write('\\x1b' + val);\n};\n\n/**\n * OSC\n */\n\n// OSC Ps ; Pt ST\n// OSC Ps ; Pt BEL\n//   Set Text Parameters.\nProgram.prototype.setTitle = function (title) {\n  this._title = title;\n\n  // if (this.term('screen')) {\n  //   // Tmux pane\n  //   // if (this.tmux) {\n  //   //   return this._write('\\x1b]2;' + title + '\\x1b\\\\');\n  //   // }\n  //   return this._write('\\x1bk' + title + '\\x1b\\\\');\n  // }\n\n  return this._twrite('\\x1b]0;' + title + '\\x07');\n};\n\n// OSC Ps ; Pt ST\n// OSC Ps ; Pt BEL\n//   Reset colors\nProgram.prototype.resetColors = function (param) {\n  if (this.has('Cr')) {\n    return this.put.Cr(param);\n  }\n  return this._twrite('\\x1b]112\\x07');\n  //return this._twrite('\\x1b]112;' + param + '\\x07');\n};\n\n// OSC Ps ; Pt ST\n// OSC Ps ; Pt BEL\n//   Change dynamic colors\nProgram.prototype.dynamicColors = function (param) {\n  if (this.has('Cs')) {\n    return this.put.Cs(param);\n  }\n  return this._twrite('\\x1b]12;' + param + '\\x07');\n};\n\n// OSC Ps ; Pt ST\n// OSC Ps ; Pt BEL\n//   Sel data\nProgram.prototype.selData = function (a, b) {\n  if (this.has('Ms')) {\n    return this.put.Ms(a, b);\n  }\n  return this._twrite('\\x1b]52;' + a + ';' + b + '\\x07');\n};\n\n/**\n * CSI\n */\n\n// CSI Ps A\n// Cursor Up Ps Times (default = 1) (CUU).\nProgram.prototype.cuu =\n  Program.prototype.up =\n  Program.prototype.cursorUp =\n    function (param) {\n      this.y -= param || 1;\n      this._ncoords();\n      if (this.tput) {\n        if (!this.tput.strings.parm_up_cursor) {\n          return this._write(this.repeat(this.tput.cuu1(), param));\n        }\n        return this.put.cuu(param);\n      }\n      return this._write('\\x1b[' + (param || '') + 'A');\n    };\n\n// CSI Ps B\n// Cursor Down Ps Times (default = 1) (CUD).\nProgram.prototype.cud =\n  Program.prototype.down =\n  Program.prototype.cursorDown =\n    function (param) {\n      this.y += param || 1;\n      this._ncoords();\n      if (this.tput) {\n        if (!this.tput.strings.parm_down_cursor) {\n          return this._write(this.repeat(this.tput.cud1(), param));\n        }\n        return this.put.cud(param);\n      }\n      return this._write('\\x1b[' + (param || '') + 'B');\n    };\n\n// CSI Ps C\n// Cursor Forward Ps Times (default = 1) (CUF).\nProgram.prototype.cuf =\n  Program.prototype.right =\n  Program.prototype.forward =\n  Program.prototype.cursorForward =\n    function (param) {\n      this.x += param || 1;\n      this._ncoords();\n      if (this.tput) {\n        if (!this.tput.strings.parm_right_cursor) {\n          return this._write(this.repeat(this.tput.cuf1(), param));\n        }\n        return this.put.cuf(param);\n      }\n      return this._write('\\x1b[' + (param || '') + 'C');\n    };\n\n// CSI Ps D\n// Cursor Backward Ps Times (default = 1) (CUB).\nProgram.prototype.cub =\n  Program.prototype.left =\n  Program.prototype.back =\n  Program.prototype.cursorBackward =\n    function (param) {\n      this.x -= param || 1;\n      this._ncoords();\n      if (this.tput) {\n        if (!this.tput.strings.parm_left_cursor) {\n          return this._write(this.repeat(this.tput.cub1(), param));\n        }\n        return this.put.cub(param);\n      }\n      return this._write('\\x1b[' + (param || '') + 'D');\n    };\n\n// CSI Ps ; Ps H\n// Cursor Position [row;column] (default = [1,1]) (CUP).\nProgram.prototype.cup =\n  Program.prototype.pos =\n  Program.prototype.cursorPos =\n    function (row, col) {\n      if (!this.zero) {\n        row = (row || 1) - 1;\n        col = (col || 1) - 1;\n      } else {\n        row = row || 0;\n        col = col || 0;\n      }\n      this.x = col;\n      this.y = row;\n      this._ncoords();\n      if (this.tput) return this.put.cup(row, col);\n      return this._write('\\x1b[' + (row + 1) + ';' + (col + 1) + 'H');\n    };\n\n// CSI Ps J  Erase in Display (ED).\n//     Ps = 0  -> Erase Below (default).\n//     Ps = 1  -> Erase Above.\n//     Ps = 2  -> Erase All.\n//     Ps = 3  -> Erase Saved Lines (xterm).\n// CSI ? Ps J\n//   Erase in Display (DECSED).\n//     Ps = 0  -> Selective Erase Below (default).\n//     Ps = 1  -> Selective Erase Above.\n//     Ps = 2  -> Selective Erase All.\nProgram.prototype.ed = Program.prototype.eraseInDisplay = function (param) {\n  if (this.tput) {\n    switch (param) {\n      case 'above':\n        param = 1;\n        break;\n      case 'all':\n        param = 2;\n        break;\n      case 'saved':\n        param = 3;\n        break;\n      case 'below':\n      default:\n        param = 0;\n        break;\n    }\n    // extended tput.E3 = ^[[3;J\n    return this.put.ed(param);\n  }\n  switch (param) {\n    case 'above':\n      return this._write('\\X1b[1J');\n    case 'all':\n      return this._write('\\x1b[2J');\n    case 'saved':\n      return this._write('\\x1b[3J');\n    case 'below':\n    default:\n      return this._write('\\x1b[J');\n  }\n};\n\nProgram.prototype.clear = function (this: ProgramInterface): void {\n  this.x = 0;\n  this.y = 0;\n  if (this.tput) return this.put.clear();\n  return this._write('\\x1b[H\\x1b[J');\n};\n\n// CSI Ps K  Erase in Line (EL).\n//     Ps = 0  -> Erase to Right (default).\n//     Ps = 1  -> Erase to Left.\n//     Ps = 2  -> Erase All.\n// CSI ? Ps K\n//   Erase in Line (DECSEL).\n//     Ps = 0  -> Selective Erase to Right (default).\n//     Ps = 1  -> Selective Erase to Left.\n//     Ps = 2  -> Selective Erase All.\nProgram.prototype.el = Program.prototype.eraseInLine = function (param) {\n  if (this.tput) {\n    //if (this.tput.back_color_erase) ...\n    switch (param) {\n      case 'left':\n        param = 1;\n        break;\n      case 'all':\n        param = 2;\n        break;\n      case 'right':\n      default:\n        param = 0;\n        break;\n    }\n    return this.put.el(param);\n  }\n  switch (param) {\n    case 'left':\n      return this._write('\\x1b[1K');\n    case 'all':\n      return this._write('\\x1b[2K');\n    case 'right':\n    default:\n      return this._write('\\x1b[K');\n  }\n};\n\n// CSI Pm m  Character Attributes (SGR).\n//     Ps = 0  -> Normal (default).\n//     Ps = 1  -> Bold.\n//     Ps = 4  -> Underlined.\n//     Ps = 5  -> Blink (appears as Bold).\n//     Ps = 7  -> Inverse.\n//     Ps = 8  -> Invisible, i.e., hidden (VT300).\n//     Ps = 2 2  -> Normal (neither bold nor faint).\n//     Ps = 2 4  -> Not underlined.\n//     Ps = 2 5  -> Steady (not blinking).\n//     Ps = 2 7  -> Positive (not inverse).\n//     Ps = 2 8  -> Visible, i.e., not hidden (VT300).\n//     Ps = 3 0  -> Set foreground color to Black.\n//     Ps = 3 1  -> Set foreground color to Red.\n//     Ps = 3 2  -> Set foreground color to Green.\n//     Ps = 3 3  -> Set foreground color to Yellow.\n//     Ps = 3 4  -> Set foreground color to Blue.\n//     Ps = 3 5  -> Set foreground color to Magenta.\n//     Ps = 3 6  -> Set foreground color to Cyan.\n//     Ps = 3 7  -> Set foreground color to White.\n//     Ps = 3 9  -> Set foreground color to default (original).\n//     Ps = 4 0  -> Set background color to Black.\n//     Ps = 4 1  -> Set background color to Red.\n//     Ps = 4 2  -> Set background color to Green.\n//     Ps = 4 3  -> Set background color to Yellow.\n//     Ps = 4 4  -> Set background color to Blue.\n//     Ps = 4 5  -> Set background color to Magenta.\n//     Ps = 4 6  -> Set background color to Cyan.\n//     Ps = 4 7  -> Set background color to White.\n//     Ps = 4 9  -> Set background color to default (original).\n\n//   If 16-color support is compiled, the following apply.  Assume\n//   that xterm's resources are set so that the ISO color codes are\n//   the first 8 of a set of 16.  Then the aixterm colors are the\n//   bright versions of the ISO colors:\n//     Ps = 9 0  -> Set foreground color to Black.\n//     Ps = 9 1  -> Set foreground color to Red.\n//     Ps = 9 2  -> Set foreground color to Green.\n//     Ps = 9 3  -> Set foreground color to Yellow.\n//     Ps = 9 4  -> Set foreground color to Blue.\n//     Ps = 9 5  -> Set foreground color to Magenta.\n//     Ps = 9 6  -> Set foreground color to Cyan.\n//     Ps = 9 7  -> Set foreground color to White.\n//     Ps = 1 0 0  -> Set background color to Black.\n//     Ps = 1 0 1  -> Set background color to Red.\n//     Ps = 1 0 2  -> Set background color to Green.\n//     Ps = 1 0 3  -> Set background color to Yellow.\n//     Ps = 1 0 4  -> Set background color to Blue.\n//     Ps = 1 0 5  -> Set background color to Magenta.\n//     Ps = 1 0 6  -> Set background color to Cyan.\n//     Ps = 1 0 7  -> Set background color to White.\n\n//   If xterm is compiled with the 16-color support disabled, it\n//   supports the following, from rxvt:\n//     Ps = 1 0 0  -> Set foreground and background color to\n//     default.\n\n//   If 88- or 256-color support is compiled, the following apply.\n//     Ps = 3 8  ; 5  ; Ps -> Set foreground color to the second\n//     Ps.\n//     Ps = 4 8  ; 5  ; Ps -> Set background color to the second\n//     Ps.\nProgram.prototype.sgr =\n  Program.prototype.attr =\n  Program.prototype.charAttributes =\n    function (param, val) {\n      return this._write(this._attr(param, val));\n    };\n\nProgram.prototype.text = function (text, attr) {\n  return this._attr(attr, true) + text + this._attr(attr, false);\n};\n\n// NOTE: sun-color may not allow multiple params for SGR.\nProgram.prototype._attr = function (param, val) {\n  var self = this,\n    parts,\n    color,\n    m;\n\n  if (Array.isArray(param)) {\n    parts = param;\n    param = parts[0] || 'normal';\n  } else {\n    param = param || 'normal';\n    parts = param.split(/\\s*[,;]\\s*/);\n  }\n\n  if (parts.length > 1) {\n    var used = {},\n      out = [];\n\n    parts.forEach(function (part) {\n      var attr = self._attr(part, val);\n      if (attr == null) return;\n      part = attr.slice(2, -1);\n      if (part === '') return;\n      if (used[part]) return;\n      used[part] = true;\n      out.push(part);\n    });\n\n    return '\\x1b[' + out.join(';') + 'm';\n  }\n\n  if (param.indexOf('no ') === 0) {\n    param = param.substring(3);\n    val = false;\n  } else if (param.indexOf('!') === 0) {\n    param = param.substring(1);\n    val = false;\n  }\n\n  switch (param) {\n    // attributes\n    case 'normal':\n    case 'default':\n      if (val === false) return '';\n      return '\\x1b[m';\n    case 'bold':\n      return val === false ? '\\x1b[22m' : '\\x1b[1m';\n    case 'ul':\n    case 'underline':\n    case 'underlined':\n      return val === false ? '\\x1b[24m' : '\\x1b[4m';\n    case 'blink':\n      return val === false ? '\\x1b[25m' : '\\x1b[5m';\n    case 'inverse':\n      return val === false ? '\\x1b[27m' : '\\x1b[7m';\n    case 'invisible':\n      return val === false ? '\\x1b[28m' : '\\x1b[8m';\n\n    // 8-color foreground\n    case 'black fg':\n      return val === false ? '\\x1b[39m' : '\\x1b[30m';\n    case 'red fg':\n      return val === false ? '\\x1b[39m' : '\\x1b[31m';\n    case 'green fg':\n      return val === false ? '\\x1b[39m' : '\\x1b[32m';\n    case 'yellow fg':\n      return val === false ? '\\x1b[39m' : '\\x1b[33m';\n    case 'blue fg':\n      return val === false ? '\\x1b[39m' : '\\x1b[34m';\n    case 'magenta fg':\n      return val === false ? '\\x1b[39m' : '\\x1b[35m';\n    case 'cyan fg':\n      return val === false ? '\\x1b[39m' : '\\x1b[36m';\n    case 'white fg':\n    case 'light grey fg':\n    case 'light gray fg':\n    case 'bright grey fg':\n    case 'bright gray fg':\n      return val === false ? '\\x1b[39m' : '\\x1b[37m';\n    case 'default fg':\n      if (val === false) return '';\n      return '\\x1b[39m';\n\n    // 8-color background\n    case 'black bg':\n      return val === false ? '\\x1b[49m' : '\\x1b[40m';\n    case 'red bg':\n      return val === false ? '\\x1b[49m' : '\\x1b[41m';\n    case 'green bg':\n      return val === false ? '\\x1b[49m' : '\\x1b[42m';\n    case 'yellow bg':\n      return val === false ? '\\x1b[49m' : '\\x1b[43m';\n    case 'blue bg':\n      return val === false ? '\\x1b[49m' : '\\x1b[44m';\n    case 'magenta bg':\n      return val === false ? '\\x1b[49m' : '\\x1b[45m';\n    case 'cyan bg':\n      return val === false ? '\\x1b[49m' : '\\x1b[46m';\n    case 'white bg':\n    case 'light grey bg':\n    case 'light gray bg':\n    case 'bright grey bg':\n    case 'bright gray bg':\n      return val === false ? '\\x1b[49m' : '\\x1b[47m';\n    case 'default bg':\n      if (val === false) return '';\n      return '\\x1b[49m';\n\n    // 16-color foreground\n    case 'light black fg':\n    case 'bright black fg':\n    case 'grey fg':\n    case 'gray fg':\n      return val === false ? '\\x1b[39m' : '\\x1b[90m';\n    case 'light red fg':\n    case 'bright red fg':\n      return val === false ? '\\x1b[39m' : '\\x1b[91m';\n    case 'light green fg':\n    case 'bright green fg':\n      return val === false ? '\\x1b[39m' : '\\x1b[92m';\n    case 'light yellow fg':\n    case 'bright yellow fg':\n      return val === false ? '\\x1b[39m' : '\\x1b[93m';\n    case 'light blue fg':\n    case 'bright blue fg':\n      return val === false ? '\\x1b[39m' : '\\x1b[94m';\n    case 'light magenta fg':\n    case 'bright magenta fg':\n      return val === false ? '\\x1b[39m' : '\\x1b[95m';\n    case 'light cyan fg':\n    case 'bright cyan fg':\n      return val === false ? '\\x1b[39m' : '\\x1b[96m';\n    case 'light white fg':\n    case 'bright white fg':\n      return val === false ? '\\x1b[39m' : '\\x1b[97m';\n\n    // 16-color background\n    case 'light black bg':\n    case 'bright black bg':\n    case 'grey bg':\n    case 'gray bg':\n      return val === false ? '\\x1b[49m' : '\\x1b[100m';\n    case 'light red bg':\n    case 'bright red bg':\n      return val === false ? '\\x1b[49m' : '\\x1b[101m';\n    case 'light green bg':\n    case 'bright green bg':\n      return val === false ? '\\x1b[49m' : '\\x1b[102m';\n    case 'light yellow bg':\n    case 'bright yellow bg':\n      return val === false ? '\\x1b[49m' : '\\x1b[103m';\n    case 'light blue bg':\n    case 'bright blue bg':\n      return val === false ? '\\x1b[49m' : '\\x1b[104m';\n    case 'light magenta bg':\n    case 'bright magenta bg':\n      return val === false ? '\\x1b[49m' : '\\x1b[105m';\n    case 'light cyan bg':\n    case 'bright cyan bg':\n      return val === false ? '\\x1b[49m' : '\\x1b[106m';\n    case 'light white bg':\n    case 'bright white bg':\n      return val === false ? '\\x1b[49m' : '\\x1b[107m';\n\n    // non-16-color rxvt default fg and bg\n    case 'default fg bg':\n      if (val === false) return '';\n      return this.term('rxvt') ? '\\x1b[100m' : '\\x1b[39;49m';\n\n    default:\n      // 256-color fg and bg\n      if (param[0] === '#') {\n        param = param.replace(/#(?:[0-9a-f]{3}){1,2}/i, colors.match);\n      }\n\n      m = /^(-?\\d+) (fg|bg)$/.exec(param);\n      if (m) {\n        color = +m[1];\n\n        if (val === false || color === -1) {\n          return this._attr('default ' + m[2]);\n        }\n\n        color = colors.reduce(color, this.tput.colors);\n\n        if (color < 16 || (this.tput && this.tput.colors <= 16)) {\n          if (m[2] === 'fg') {\n            if (color < 8) {\n              color += 30;\n            } else if (color < 16) {\n              color -= 8;\n              color += 90;\n            }\n          } else if (m[2] === 'bg') {\n            if (color < 8) {\n              color += 40;\n            } else if (color < 16) {\n              color -= 8;\n              color += 100;\n            }\n          }\n          return '\\x1b[' + color + 'm';\n        }\n\n        if (m[2] === 'fg') {\n          return '\\x1b[38;5;' + color + 'm';\n        }\n\n        if (m[2] === 'bg') {\n          return '\\x1b[48;5;' + color + 'm';\n        }\n      }\n\n      if (/^[\\d;]*$/.test(param)) {\n        return '\\x1b[' + param + 'm';\n      }\n\n      return null;\n  }\n};\n\nProgram.prototype.fg = Program.prototype.setForeground = function (color, val) {\n  color = color.split(/\\s*[,;]\\s*/).join(' fg, ') + ' fg';\n  return this.attr(color, val);\n};\n\nProgram.prototype.bg = Program.prototype.setBackground = function (color, val) {\n  color = color.split(/\\s*[,;]\\s*/).join(' bg, ') + ' bg';\n  return this.attr(color, val);\n};\n\n// CSI Ps n  Device Status Report (DSR).\n//     Ps = 5  -> Status Report.  Result (``OK'') is\n//   CSI 0 n\n//     Ps = 6  -> Report Cursor Position (CPR) [row;column].\n//   Result is\n//   CSI r ; c R\n// CSI ? Ps n\n//   Device Status Report (DSR, DEC-specific).\n//     Ps = 6  -> Report Cursor Position (CPR) [row;column] as CSI\n//     ? r ; c R (assumes page is zero).\n//     Ps = 1 5  -> Report Printer status as CSI ? 1 0  n  (ready).\n//     or CSI ? 1 1  n  (not ready).\n//     Ps = 2 5  -> Report UDK status as CSI ? 2 0  n  (unlocked)\n//     or CSI ? 2 1  n  (locked).\n//     Ps = 2 6  -> Report Keyboard status as\n//   CSI ? 2 7  ;  1  ;  0  ;  0  n  (North American).\n//   The last two parameters apply to VT400 & up, and denote key-\n//   board ready and LK01 respectively.\n//     Ps = 5 3  -> Report Locator status as\n//   CSI ? 5 3  n  Locator available, if compiled-in, or\n//   CSI ? 5 0  n  No Locator, if not.\nProgram.prototype.dsr = Program.prototype.deviceStatus = function (\n  param,\n  callback,\n  dec,\n  noBypass\n) {\n  if (dec) {\n    return this.response(\n      'device-status',\n      '\\x1b[?' + (param || '0') + 'n',\n      callback,\n      noBypass\n    );\n  }\n  return this.response(\n    'device-status',\n    '\\x1b[' + (param || '0') + 'n',\n    callback,\n    noBypass\n  );\n};\n\nProgram.prototype.getCursor = function (callback) {\n  return this.deviceStatus(6, callback, false, true);\n};\n\nProgram.prototype.saveReportedCursor = function (callback) {\n  var self = this;\n  if (this.tput.strings.user7 === '\\x1b[6n' || this.term('screen')) {\n    return this.getCursor(function (err, data) {\n      if (data) {\n        self._rx = data.status.x;\n        self._ry = data.status.y;\n      }\n      if (!callback) return;\n      return callback(err);\n    });\n  }\n  if (!callback) return;\n  return callback();\n};\n\nProgram.prototype.restoreReportedCursor = function () {\n  if (this._rx == null) return;\n  return this.cup(this._ry, this._rx);\n  // return this.nel();\n};\n\n/**\n * Additions\n */\n\n// CSI Ps @\n// Insert Ps (Blank) Character(s) (default = 1) (ICH).\nProgram.prototype.ich = Program.prototype.insertChars = function (param) {\n  this.x += param || 1;\n  this._ncoords();\n  if (this.tput) return this.put.ich(param);\n  return this._write('\\x1b[' + (param || 1) + '@');\n};\n\n// CSI Ps E\n// Cursor Next Line Ps Times (default = 1) (CNL).\n// same as CSI Ps B ?\nProgram.prototype.cnl = Program.prototype.cursorNextLine = function (param) {\n  this.y += param || 1;\n  this._ncoords();\n  return this._write('\\x1b[' + (param || '') + 'E');\n};\n\n// CSI Ps F\n// Cursor Preceding Line Ps Times (default = 1) (CNL).\n// reuse CSI Ps A ?\nProgram.prototype.cpl = Program.prototype.cursorPrecedingLine = function (\n  param\n) {\n  this.y -= param || 1;\n  this._ncoords();\n  return this._write('\\x1b[' + (param || '') + 'F');\n};\n\n// CSI Ps G\n// Cursor Character Absolute  [column] (default = [row,1]) (CHA).\nProgram.prototype.cha = Program.prototype.cursorCharAbsolute = function (\n  param\n) {\n  if (!this.zero) {\n    param = (param || 1) - 1;\n  } else {\n    param = param || 0;\n  }\n  this.x = param;\n  this.y = 0;\n  this._ncoords();\n  if (this.tput) return this.put.hpa(param);\n  return this._write('\\x1b[' + (param + 1) + 'G');\n};\n\n// CSI Ps L\n// Insert Ps Line(s) (default = 1) (IL).\nProgram.prototype.il = Program.prototype.insertLines = function (param) {\n  if (this.tput) return this.put.il(param);\n  return this._write('\\x1b[' + (param || '') + 'L');\n};\n\n// CSI Ps M\n// Delete Ps Line(s) (default = 1) (DL).\nProgram.prototype.dl = Program.prototype.deleteLines = function (param) {\n  if (this.tput) return this.put.dl(param);\n  return this._write('\\x1b[' + (param || '') + 'M');\n};\n\n// CSI Ps P\n// Delete Ps Character(s) (default = 1) (DCH).\nProgram.prototype.dch = Program.prototype.deleteChars = function (param) {\n  if (this.tput) return this.put.dch(param);\n  return this._write('\\x1b[' + (param || '') + 'P');\n};\n\n// CSI Ps X\n// Erase Ps Character(s) (default = 1) (ECH).\nProgram.prototype.ech = Program.prototype.eraseChars = function (param) {\n  if (this.tput) return this.put.ech(param);\n  return this._write('\\x1b[' + (param || '') + 'X');\n};\n\n// CSI Pm `  Character Position Absolute\n//   [column] (default = [row,1]) (HPA).\nProgram.prototype.hpa = Program.prototype.charPosAbsolute = function (param) {\n  this.x = param || 0;\n  this._ncoords();\n  if (this.tput) {\n    return this.put.hpa.apply(this.put, arguments);\n  }\n  param = slice.call(arguments).join(';');\n  return this._write('\\x1b[' + (param || '') + '`');\n};\n\n// 141 61 a * HPR -\n// Horizontal Position Relative\n// reuse CSI Ps C ?\nProgram.prototype.hpr = Program.prototype.HPositionRelative = function (param) {\n  if (this.tput) return this.cuf(param);\n  this.x += param || 1;\n  this._ncoords();\n  // Does not exist:\n  // if (this.tput) return this.put.hpr(param);\n  return this._write('\\x1b[' + (param || '') + 'a');\n};\n\n// CSI Ps c  Send Device Attributes (Primary DA).\n//     Ps = 0  or omitted -> request attributes from terminal.  The\n//     response depends on the decTerminalID resource setting.\n//     -> CSI ? 1 ; 2 c  (``VT100 with Advanced Video Option'')\n//     -> CSI ? 1 ; 0 c  (``VT101 with No Options'')\n//     -> CSI ? 6 c  (``VT102'')\n//     -> CSI ? 6 0 ; 1 ; 2 ; 6 ; 8 ; 9 ; 1 5 ; c  (``VT220'')\n//   The VT100-style response parameters do not mean anything by\n//   themselves.  VT220 parameters do, telling the host what fea-\n//   tures the terminal supports:\n//     Ps = 1  -> 132-columns.\n//     Ps = 2  -> Printer.\n//     Ps = 6  -> Selective erase.\n//     Ps = 8  -> User-defined keys.\n//     Ps = 9  -> National replacement character sets.\n//     Ps = 1 5  -> Technical characters.\n//     Ps = 2 2  -> ANSI color, e.g., VT525.\n//     Ps = 2 9  -> ANSI text locator (i.e., DEC Locator mode).\n// CSI > Ps c\n//   Send Device Attributes (Secondary DA).\n//     Ps = 0  or omitted -> request the terminal's identification\n//     code.  The response depends on the decTerminalID resource set-\n//     ting.  It should apply only to VT220 and up, but xterm extends\n//     this to VT100.\n//     -> CSI  > Pp ; Pv ; Pc c\n//   where Pp denotes the terminal type\n//     Pp = 0  -> ``VT100''.\n//     Pp = 1  -> ``VT220''.\n//   and Pv is the firmware version (for xterm, this was originally\n//   the XFree86 patch number, starting with 95).  In a DEC termi-\n//   nal, Pc indicates the ROM cartridge registration number and is\n//   always zero.\n// More information:\n//   xterm/charproc.c - line 2012, for more information.\n//   vim responds with ^[[?0c or ^[[?1c after the terminal's response (?)\nProgram.prototype.da = Program.prototype.sendDeviceAttributes = function (\n  param,\n  callback\n) {\n  return this.response(\n    'device-attributes',\n    '\\x1b[' + (param || '') + 'c',\n    callback\n  );\n};\n\n// CSI Pm d\n// Line Position Absolute  [row] (default = [1,column]) (VPA).\n// NOTE: Can't find in terminfo, no idea why it has multiple params.\nProgram.prototype.vpa = Program.prototype.linePosAbsolute = function (param) {\n  this.y = param || 1;\n  this._ncoords();\n  if (this.tput) {\n    return this.put.vpa.apply(this.put, arguments);\n  }\n  param = slice.call(arguments).join(';');\n  return this._write('\\x1b[' + (param || '') + 'd');\n};\n\n// 145 65 e * VPR - Vertical Position Relative\n// reuse CSI Ps B ?\nProgram.prototype.vpr = Program.prototype.VPositionRelative = function (param) {\n  if (this.tput) return this.cud(param);\n  this.y += param || 1;\n  this._ncoords();\n  // Does not exist:\n  // if (this.tput) return this.put.vpr(param);\n  return this._write('\\x1b[' + (param || '') + 'e');\n};\n\n// CSI Ps ; Ps f\n//   Horizontal and Vertical Position [row;column] (default =\n//   [1,1]) (HVP).\nProgram.prototype.hvp = Program.prototype.HVPosition = function (row, col) {\n  if (!this.zero) {\n    row = (row || 1) - 1;\n    col = (col || 1) - 1;\n  } else {\n    row = row || 0;\n    col = col || 0;\n  }\n  this.y = row;\n  this.x = col;\n  this._ncoords();\n  // Does not exist (?):\n  // if (this.tput) return this.put.hvp(row, col);\n  if (this.tput) return this.put.cup(row, col);\n  return this._write('\\x1b[' + (row + 1) + ';' + (col + 1) + 'f');\n};\n\n// CSI Pm h  Set Mode (SM).\n//     Ps = 2  -> Keyboard Action Mode (AM).\n//     Ps = 4  -> Insert Mode (IRM).\n//     Ps = 1 2  -> Send/receive (SRM).\n//     Ps = 2 0  -> Automatic Newline (LNM).\n// CSI ? Pm h\n//   DEC Private Mode Set (DECSET).\n//     Ps = 1  -> Application Cursor Keys (DECCKM).\n//     Ps = 2  -> Designate USASCII for character sets G0-G3\n//     (DECANM), and set VT100 mode.\n//     Ps = 3  -> 132 Column Mode (DECCOLM).\n//     Ps = 4  -> Smooth (Slow) Scroll (DECSCLM).\n//     Ps = 5  -> Reverse Video (DECSCNM).\n//     Ps = 6  -> Origin Mode (DECOM).\n//     Ps = 7  -> Wraparound Mode (DECAWM).\n//     Ps = 8  -> Auto-repeat Keys (DECARM).\n//     Ps = 9  -> Send Mouse X & Y on button press.  See the sec-\n//     tion Mouse Tracking.\n//     Ps = 1 0  -> Show toolbar (rxvt).\n//     Ps = 1 2  -> Start Blinking Cursor (att610).\n//     Ps = 1 8  -> Print form feed (DECPFF).\n//     Ps = 1 9  -> Set print extent to full screen (DECPEX).\n//     Ps = 2 5  -> Show Cursor (DECTCEM).\n//     Ps = 3 0  -> Show scrollbar (rxvt).\n//     Ps = 3 5  -> Enable font-shifting functions (rxvt).\n//     Ps = 3 8  -> Enter Tektronix Mode (DECTEK).\n//     Ps = 4 0  -> Allow 80 -> 132 Mode.\n//     Ps = 4 1  -> more(1) fix (see curses resource).\n//     Ps = 4 2  -> Enable Nation Replacement Character sets (DECN-\n//     RCM).\n//     Ps = 4 4  -> Turn On Margin Bell.\n//     Ps = 4 5  -> Reverse-wraparound Mode.\n//     Ps = 4 6  -> Start Logging.  This is normally disabled by a\n//     compile-time option.\n//     Ps = 4 7  -> Use Alternate Screen Buffer.  (This may be dis-\n//     abled by the titeInhibit resource).\n//     Ps = 6 6  -> Application keypad (DECNKM).\n//     Ps = 6 7  -> Backarrow key sends backspace (DECBKM).\n//     Ps = 1 0 0 0  -> Send Mouse X & Y on button press and\n//     release.  See the section Mouse Tracking.\n//     Ps = 1 0 0 1  -> Use Hilite Mouse Tracking.\n//     Ps = 1 0 0 2  -> Use Cell Motion Mouse Tracking.\n//     Ps = 1 0 0 3  -> Use All Motion Mouse Tracking.\n//     Ps = 1 0 0 4  -> Send FocusIn/FocusOut events.\n//     Ps = 1 0 0 5  -> Enable Extended Mouse Mode.\n//     Ps = 1 0 1 0  -> Scroll to bottom on tty output (rxvt).\n//     Ps = 1 0 1 1  -> Scroll to bottom on key press (rxvt).\n//     Ps = 1 0 3 4  -> Interpret \"meta\" key, sets eighth bit.\n//     (enables the eightBitInput resource).\n//     Ps = 1 0 3 5  -> Enable special modifiers for Alt and Num-\n//     Lock keys.  (This enables the numLock resource).\n//     Ps = 1 0 3 6  -> Send ESC   when Meta modifies a key.  (This\n//     enables the metaSendsEscape resource).\n//     Ps = 1 0 3 7  -> Send DEL from the editing-keypad Delete\n//     key.\n//     Ps = 1 0 3 9  -> Send ESC  when Alt modifies a key.  (This\n//     enables the altSendsEscape resource).\n//     Ps = 1 0 4 0  -> Keep selection even if not highlighted.\n//     (This enables the keepSelection resource).\n//     Ps = 1 0 4 1  -> Use the CLIPBOARD selection.  (This enables\n//     the selectToClipboard resource).\n//     Ps = 1 0 4 2  -> Enable Urgency window manager hint when\n//     Control-G is received.  (This enables the bellIsUrgent\n//     resource).\n//     Ps = 1 0 4 3  -> Enable raising of the window when Control-G\n//     is received.  (enables the popOnBell resource).\n//     Ps = 1 0 4 7  -> Use Alternate Screen Buffer.  (This may be\n//     disabled by the titeInhibit resource).\n//     Ps = 1 0 4 8  -> Save cursor as in DECSC.  (This may be dis-\n//     abled by the titeInhibit resource).\n//     Ps = 1 0 4 9  -> Save cursor as in DECSC and use Alternate\n//     Screen Buffer, clearing it first.  (This may be disabled by\n//     the titeInhibit resource).  This combines the effects of the 1\n//     0 4 7  and 1 0 4 8  modes.  Use this with terminfo-based\n//     applications rather than the 4 7  mode.\n//     Ps = 1 0 5 0  -> Set terminfo/termcap function-key mode.\n//     Ps = 1 0 5 1  -> Set Sun function-key mode.\n//     Ps = 1 0 5 2  -> Set HP function-key mode.\n//     Ps = 1 0 5 3  -> Set SCO function-key mode.\n//     Ps = 1 0 6 0  -> Set legacy keyboard emulation (X11R6).\n//     Ps = 1 0 6 1  -> Set VT220 keyboard emulation.\n//     Ps = 2 0 0 4  -> Set bracketed paste mode.\n// Modes:\n//   http://vt100.net/docs/vt220-rm/chapter4.html\nProgram.prototype.sm = Program.prototype.setMode = function () {\n  var param = slice.call(arguments).join(';');\n  return this._write('\\x1b[' + (param || '') + 'h');\n};\n\nProgram.prototype.decset = function () {\n  var param = slice.call(arguments).join(';');\n  return this.setMode('?' + param);\n};\n\nProgram.prototype.dectcem =\n  Program.prototype.cnorm =\n  Program.prototype.cvvis =\n  Program.prototype.showCursor =\n    function () {\n      this.cursorHidden = false;\n      // NOTE: In xterm terminfo:\n      // cnorm stops blinking cursor\n      // cvvis starts blinking cursor\n      if (this.tput) return this.put.cnorm();\n      //if (this.tput) return this.put.cvvis();\n      // return this._write('\\x1b[?12l\\x1b[?25h'); // cursor_normal\n      // return this._write('\\x1b[?12;25h'); // cursor_visible\n      return this.setMode('?25');\n    };\n\nProgram.prototype.alternate =\n  Program.prototype.smcup =\n  Program.prototype.alternateBuffer =\n    function () {\n      this.isAlt = true;\n      if (this.tput) return this.put.smcup();\n      if (this.term('vt') || this.term('linux')) return;\n      this.setMode('?47');\n      return this.setMode('?1049');\n    };\n\n// CSI Pm l  Reset Mode (RM).\n//     Ps = 2  -> Keyboard Action Mode (AM).\n//     Ps = 4  -> Replace Mode (IRM).\n//     Ps = 1 2  -> Send/receive (SRM).\n//     Ps = 2 0  -> Normal Linefeed (LNM).\n// CSI ? Pm l\n//   DEC Private Mode Reset (DECRST).\n//     Ps = 1  -> Normal Cursor Keys (DECCKM).\n//     Ps = 2  -> Designate VT52 mode (DECANM).\n//     Ps = 3  -> 80 Column Mode (DECCOLM).\n//     Ps = 4  -> Jump (Fast) Scroll (DECSCLM).\n//     Ps = 5  -> Normal Video (DECSCNM).\n//     Ps = 6  -> Normal Cursor Mode (DECOM).\n//     Ps = 7  -> No Wraparound Mode (DECAWM).\n//     Ps = 8  -> No Auto-repeat Keys (DECARM).\n//     Ps = 9  -> Don't send Mouse X & Y on button press.\n//     Ps = 1 0  -> Hide toolbar (rxvt).\n//     Ps = 1 2  -> Stop Blinking Cursor (att610).\n//     Ps = 1 8  -> Don't print form feed (DECPFF).\n//     Ps = 1 9  -> Limit print to scrolling region (DECPEX).\n//     Ps = 2 5  -> Hide Cursor (DECTCEM).\n//     Ps = 3 0  -> Don't show scrollbar (rxvt).\n//     Ps = 3 5  -> Disable font-shifting functions (rxvt).\n//     Ps = 4 0  -> Disallow 80 -> 132 Mode.\n//     Ps = 4 1  -> No more(1) fix (see curses resource).\n//     Ps = 4 2  -> Disable Nation Replacement Character sets (DEC-\n//     NRCM).\n//     Ps = 4 4  -> Turn Off Margin Bell.\n//     Ps = 4 5  -> No Reverse-wraparound Mode.\n//     Ps = 4 6  -> Stop Logging.  (This is normally disabled by a\n//     compile-time option).\n//     Ps = 4 7  -> Use Normal Screen Buffer.\n//     Ps = 6 6  -> Numeric keypad (DECNKM).\n//     Ps = 6 7  -> Backarrow key sends delete (DECBKM).\n//     Ps = 1 0 0 0  -> Don't send Mouse X & Y on button press and\n//     release.  See the section Mouse Tracking.\n//     Ps = 1 0 0 1  -> Don't use Hilite Mouse Tracking.\n//     Ps = 1 0 0 2  -> Don't use Cell Motion Mouse Tracking.\n//     Ps = 1 0 0 3  -> Don't use All Motion Mouse Tracking.\n//     Ps = 1 0 0 4  -> Don't send FocusIn/FocusOut events.\n//     Ps = 1 0 0 5  -> Disable Extended Mouse Mode.\n//     Ps = 1 0 1 0  -> Don't scroll to bottom on tty output\n//     (rxvt).\n//     Ps = 1 0 1 1  -> Don't scroll to bottom on key press (rxvt).\n//     Ps = 1 0 3 4  -> Don't interpret \"meta\" key.  (This disables\n//     the eightBitInput resource).\n//     Ps = 1 0 3 5  -> Disable special modifiers for Alt and Num-\n//     Lock keys.  (This disables the numLock resource).\n//     Ps = 1 0 3 6  -> Don't send ESC  when Meta modifies a key.\n//     (This disables the metaSendsEscape resource).\n//     Ps = 1 0 3 7  -> Send VT220 Remove from the editing-keypad\n//     Delete key.\n//     Ps = 1 0 3 9  -> Don't send ESC  when Alt modifies a key.\n//     (This disables the altSendsEscape resource).\n//     Ps = 1 0 4 0  -> Do not keep selection when not highlighted.\n//     (This disables the keepSelection resource).\n//     Ps = 1 0 4 1  -> Use the PRIMARY selection.  (This disables\n//     the selectToClipboard resource).\n//     Ps = 1 0 4 2  -> Disable Urgency window manager hint when\n//     Control-G is received.  (This disables the bellIsUrgent\n//     resource).\n//     Ps = 1 0 4 3  -> Disable raising of the window when Control-\n//     G is received.  (This disables the popOnBell resource).\n//     Ps = 1 0 4 7  -> Use Normal Screen Buffer, clearing screen\n//     first if in the Alternate Screen.  (This may be disabled by\n//     the titeInhibit resource).\n//     Ps = 1 0 4 8  -> Restore cursor as in DECRC.  (This may be\n//     disabled by the titeInhibit resource).\n//     Ps = 1 0 4 9  -> Use Normal Screen Buffer and restore cursor\n//     as in DECRC.  (This may be disabled by the titeInhibit\n//     resource).  This combines the effects of the 1 0 4 7  and 1 0\n//     4 8  modes.  Use this with terminfo-based applications rather\n//     than the 4 7  mode.\n//     Ps = 1 0 5 0  -> Reset terminfo/termcap function-key mode.\n//     Ps = 1 0 5 1  -> Reset Sun function-key mode.\n//     Ps = 1 0 5 2  -> Reset HP function-key mode.\n//     Ps = 1 0 5 3  -> Reset SCO function-key mode.\n//     Ps = 1 0 6 0  -> Reset legacy keyboard emulation (X11R6).\n//     Ps = 1 0 6 1  -> Reset keyboard emulation to Sun/PC style.\n//     Ps = 2 0 0 4  -> Reset bracketed paste mode.\nProgram.prototype.rm = Program.prototype.resetMode = function () {\n  var param = slice.call(arguments).join(';');\n  return this._write('\\x1b[' + (param || '') + 'l');\n};\n\nProgram.prototype.decrst = function () {\n  var param = slice.call(arguments).join(';');\n  return this.resetMode('?' + param);\n};\n\nProgram.prototype.dectcemh =\n  Program.prototype.cursor_invisible =\n  Program.prototype.vi =\n  Program.prototype.civis =\n  Program.prototype.hideCursor =\n    function () {\n      this.cursorHidden = true;\n      if (this.tput) return this.put.civis();\n      return this.resetMode('?25');\n    };\n\nProgram.prototype.rmcup = Program.prototype.normalBuffer = function () {\n  this.isAlt = false;\n  if (this.tput) return this.put.rmcup();\n  this.resetMode('?47');\n  return this.resetMode('?1049');\n};\n\nProgram.prototype.enableMouse = function () {\n  if (process.env.BLESSED_FORCE_MODES) {\n    var modes = process.env.BLESSED_FORCE_MODES.split(',');\n    var options = {};\n    for (var n = 0; n < modes.length; ++n) {\n      var pair = modes[n].split('=');\n      var v = pair[1] !== '0';\n      switch (pair[0].toUpperCase()) {\n        case 'SGRMOUSE':\n          options.sgrMouse = v;\n          break;\n        case 'UTFMOUSE':\n          options.utfMouse = v;\n          break;\n        case 'VT200MOUSE':\n          options.vt200Mouse = v;\n          break;\n        case 'URXVTMOUSE':\n          options.urxvtMouse = v;\n          break;\n        case 'X10MOUSE':\n          options.x10Mouse = v;\n          break;\n        case 'DECMOUSE':\n          options.decMouse = v;\n          break;\n        case 'PTERMMOUSE':\n          options.ptermMouse = v;\n          break;\n        case 'JSBTERMMOUSE':\n          options.jsbtermMouse = v;\n          break;\n        case 'VT200HILITE':\n          options.vt200Hilite = v;\n          break;\n        case 'GPMMOUSE':\n          options.gpmMouse = v;\n          break;\n        case 'CELLMOTION':\n          options.cellMotion = v;\n          break;\n        case 'ALLMOTION':\n          options.allMotion = v;\n          break;\n        case 'SENDFOCUS':\n          options.sendFocus = v;\n          break;\n      }\n    }\n    return this.setMouse(options, true);\n  }\n\n  // NOTE:\n  // Cell Motion isn't normally need for anything below here, but we'll\n  // activate it for tmux (whether using it or not) in case our all-motion\n  // passthrough does not work. It can't hurt.\n\n  if (this.term('rxvt-unicode')) {\n    return this.setMouse(\n      {\n        urxvtMouse: true,\n        cellMotion: true,\n        allMotion: true,\n      },\n      true\n    );\n  }\n\n  // rxvt does not support the X10 UTF extensions\n  if (this.term('rxvt')) {\n    return this.setMouse(\n      {\n        vt200Mouse: true,\n        x10Mouse: true,\n        cellMotion: true,\n        allMotion: true,\n      },\n      true\n    );\n  }\n\n  // libvte is broken. Older versions do not support the\n  // X10 UTF extension. However, later versions do support\n  // SGR/URXVT.\n  if (this.isVTE) {\n    return this.setMouse(\n      {\n        // NOTE: Could also use urxvtMouse here.\n        sgrMouse: true,\n        cellMotion: true,\n        allMotion: true,\n      },\n      true\n    );\n  }\n\n  if (this.term('linux')) {\n    return this.setMouse(\n      {\n        vt200Mouse: true,\n        gpmMouse: true,\n      },\n      true\n    );\n  }\n\n  if (\n    this.term('xterm') ||\n    this.term('screen') ||\n    (this.tput && this.tput.strings.key_mouse)\n  ) {\n    return this.setMouse(\n      {\n        vt200Mouse: true,\n        utfMouse: true,\n        cellMotion: true,\n        allMotion: true,\n      },\n      true\n    );\n  }\n};\n\nProgram.prototype.disableMouse = function () {\n  if (!this._currentMouse) return;\n\n  var obj = {};\n\n  Object.keys(this._currentMouse).forEach(function (key) {\n    obj[key] = false;\n  });\n\n  return this.setMouse(obj, false);\n};\n\n// Set Mouse\nProgram.prototype.setMouse = function (opt, enable) {\n  if (opt.normalMouse !== null) {\n    opt.vt200Mouse = opt.normalMouse;\n    opt.allMotion = opt.normalMouse;\n  }\n\n  if (opt.hiliteTracking !== null) {\n    opt.vt200Hilite = opt.hiliteTracking;\n  }\n\n  if (enable === true) {\n    if (this._currentMouse) {\n      this.setMouse(opt);\n      Object.keys(opt).forEach(function (key) {\n        this._currentMouse[key] = opt[key];\n      }, this);\n      return;\n    }\n    this._currentMouse = opt;\n    this.mouseEnabled = true;\n  } else if (enable === false) {\n    delete this._currentMouse;\n    this.mouseEnabled = false;\n  }\n\n  //     Ps = 9  -> Send Mouse X & Y on button press.  See the sec-\n  //     tion Mouse Tracking.\n  //     Ps = 9  -> Don't send Mouse X & Y on button press.\n  // x10 mouse\n  if (opt.x10Mouse !== null) {\n    if (opt.x10Mouse) this.setMode('?9');\n    else this.resetMode('?9');\n  }\n\n  //     Ps = 1 0 0 0  -> Send Mouse X & Y on button press and\n  //     release.  See the section Mouse Tracking.\n  //     Ps = 1 0 0 0  -> Don't send Mouse X & Y on button press and\n  //     release.  See the section Mouse Tracking.\n  // vt200 mouse\n  if (opt.vt200Mouse !== null) {\n    if (opt.vt200Mouse) this.setMode('?1000');\n    else this.resetMode('?1000');\n  }\n\n  //     Ps = 1 0 0 1  -> Use Hilite Mouse Tracking.\n  //     Ps = 1 0 0 1  -> Don't use Hilite Mouse Tracking.\n  if (opt.vt200Hilite !== null) {\n    if (opt.vt200Hilite) this.setMode('?1001');\n    else this.resetMode('?1001');\n  }\n\n  //     Ps = 1 0 0 2  -> Use Cell Motion Mouse Tracking.\n  //     Ps = 1 0 0 2  -> Don't use Cell Motion Mouse Tracking.\n  // button event mouse\n  if (opt.cellMotion !== null) {\n    if (opt.cellMotion) this.setMode('?1002');\n    else this.resetMode('?1002');\n  }\n\n  //     Ps = 1 0 0 3  -> Use All Motion Mouse Tracking.\n  //     Ps = 1 0 0 3  -> Don't use All Motion Mouse Tracking.\n  // any event mouse\n  if (opt.allMotion !== null) {\n    // NOTE: Latest versions of tmux seem to only support cellMotion (not\n    // allMotion). We pass all motion through to the terminal.\n    if (this.tmux && this.tmuxVersion >= 2) {\n      if (opt.allMotion) this._twrite('\\x1b[?1003h');\n      else this._twrite('\\x1b[?1003l');\n    } else {\n      if (opt.allMotion) this.setMode('?1003');\n      else this.resetMode('?1003');\n    }\n  }\n\n  //     Ps = 1 0 0 4  -> Send FocusIn/FocusOut events.\n  //     Ps = 1 0 0 4  -> Don't send FocusIn/FocusOut events.\n  if (opt.sendFocus !== null) {\n    if (opt.sendFocus) this.setMode('?1004');\n    else this.resetMode('?1004');\n  }\n\n  //     Ps = 1 0 0 5  -> Enable Extended Mouse Mode.\n  //     Ps = 1 0 0 5  -> Disable Extended Mouse Mode.\n  if (opt.utfMouse !== null) {\n    if (opt.utfMouse) this.setMode('?1005');\n    else this.resetMode('?1005');\n  }\n\n  // sgr mouse\n  if (opt.sgrMouse !== null) {\n    if (opt.sgrMouse) this.setMode('?1006');\n    else this.resetMode('?1006');\n  }\n\n  // urxvt mouse\n  if (opt.urxvtMouse !== null) {\n    if (opt.urxvtMouse) this.setMode('?1015');\n    else this.resetMode('?1015');\n  }\n\n  // dec mouse\n  if (opt.decMouse !== null) {\n    if (opt.decMouse) this._write(\"\\x1b[1;2'z\\x1b[1;3'{\");\n    else this._write(\"\\x1b['z\");\n  }\n\n  // pterm mouse\n  if (opt.ptermMouse !== null) {\n    if (opt.ptermMouse) this._write('\\x1b[>1h\\x1b[>6h\\x1b[>7h\\x1b[>1h\\x1b[>9l');\n    else this._write('\\x1b[>1l\\x1b[>6l\\x1b[>7l\\x1b[>1l\\x1b[>9h');\n  }\n\n  // jsbterm mouse\n  if (opt.jsbtermMouse !== null) {\n    // + = advanced mode\n    if (opt.jsbtermMouse) this._write('\\x1b[0~ZwLMRK+1Q\\x1b\\\\');\n    else this._write('\\x1b[0~ZwQ\\x1b\\\\');\n  }\n\n  // gpm mouse\n  if (opt.gpmMouse !== null) {\n    if (opt.gpmMouse) this.enableGpm();\n    else this.disableGpm();\n  }\n};\n\n// CSI Ps ; Ps r\n//   Set Scrolling Region [top;bottom] (default = full size of win-\n//   dow) (DECSTBM).\n// CSI ? Pm r\nProgram.prototype.decstbm =\n  Program.prototype.csr =\n  Program.prototype.setScrollRegion =\n    function (top, bottom) {\n      if (!this.zero) {\n        top = (top || 1) - 1;\n        bottom = (bottom || this.rows) - 1;\n      } else {\n        top = top || 0;\n        bottom = bottom || this.rows - 1;\n      }\n      this.scrollTop = top;\n      this.scrollBottom = bottom;\n      this.x = 0;\n      this.y = 0;\n      this._ncoords();\n      if (this.tput) return this.put.csr(top, bottom);\n      return this._write('\\x1b[' + (top + 1) + ';' + (bottom + 1) + 'r');\n    };\n\n// CSI s\n//   Save cursor (ANSI.SYS).\nProgram.prototype.scA = Program.prototype.saveCursorA = function () {\n  this.savedX = this.x;\n  this.savedY = this.y;\n  if (this.tput) return this.put.sc();\n  return this._write('\\x1b[s');\n};\n\n// CSI u\n//   Restore cursor (ANSI.SYS).\nProgram.prototype.rcA = Program.prototype.restoreCursorA = function () {\n  this.x = this.savedX || 0;\n  this.y = this.savedY || 0;\n  if (this.tput) return this.put.rc();\n  return this._write('\\x1b[u');\n};\n\n/**\n * Lesser Used\n */\n\n// CSI Ps I\n//   Cursor Forward Tabulation Ps tab stops (default = 1) (CHT).\nProgram.prototype.cht = Program.prototype.cursorForwardTab = function (param) {\n  this.x += 8;\n  this._ncoords();\n  if (this.tput) return this.put.tab(param);\n  return this._write('\\x1b[' + (param || 1) + 'I');\n};\n\n// CSI Ps S  Scroll up Ps lines (default = 1) (SU).\nProgram.prototype.su = Program.prototype.scrollUp = function (param) {\n  this.y -= param || 1;\n  this._ncoords();\n  if (this.tput) return this.put.parm_index(param);\n  return this._write('\\x1b[' + (param || 1) + 'S');\n};\n\n// CSI Ps T  Scroll down Ps lines (default = 1) (SD).\nProgram.prototype.sd = Program.prototype.scrollDown = function (param) {\n  this.y += param || 1;\n  this._ncoords();\n  if (this.tput) return this.put.parm_rindex(param);\n  return this._write('\\x1b[' + (param || 1) + 'T');\n};\n\n// CSI Ps ; Ps ; Ps ; Ps ; Ps T\n//   Initiate highlight mouse tracking.  Parameters are\n//   [func;startx;starty;firstrow;lastrow].  See the section Mouse\n//   Tracking.\nProgram.prototype.initMouseTracking = function () {\n  return this._write('\\x1b[' + slice.call(arguments).join(';') + 'T');\n};\n\n// CSI > Ps; Ps T\n//   Reset one or more features of the title modes to the default\n//   value.  Normally, \"reset\" disables the feature.  It is possi-\n//   ble to disable the ability to reset features by compiling a\n//   different default for the title modes into xterm.\n//     Ps = 0  -> Do not set window/icon labels using hexadecimal.\n//     Ps = 1  -> Do not query window/icon labels using hexadeci-\n//     mal.\n//     Ps = 2  -> Do not set window/icon labels using UTF-8.\n//     Ps = 3  -> Do not query window/icon labels using UTF-8.\n//   (See discussion of \"Title Modes\").\nProgram.prototype.resetTitleModes = function () {\n  return this._write('\\x1b[>' + slice.call(arguments).join(';') + 'T');\n};\n\n// CSI Ps Z  Cursor Backward Tabulation Ps tab stops (default = 1) (CBT).\nProgram.prototype.cbt = Program.prototype.cursorBackwardTab = function (param) {\n  this.x -= 8;\n  this._ncoords();\n  if (this.tput) return this.put.cbt(param);\n  return this._write('\\x1b[' + (param || 1) + 'Z');\n};\n\n// CSI Ps b  Repeat the preceding graphic character Ps times (REP).\nProgram.prototype.rep = Program.prototype.repeatPrecedingCharacter = function (\n  param\n) {\n  this.x += param || 1;\n  this._ncoords();\n  if (this.tput) return this.put.rep(param);\n  return this._write('\\x1b[' + (param || 1) + 'b');\n};\n\n// CSI Ps g  Tab Clear (TBC).\n//     Ps = 0  -> Clear Current Column (default).\n//     Ps = 3  -> Clear All.\n// Potentially:\n//   Ps = 2  -> Clear Stops on Line.\n//   http://vt100.net/annarbor/aaa-ug/section6.html\nProgram.prototype.tbc = Program.prototype.tabClear = function (param) {\n  if (this.tput) return this.put.tbc(param);\n  return this._write('\\x1b[' + (param || 0) + 'g');\n};\n\n// CSI Pm i  Media Copy (MC).\n//     Ps = 0  -> Print screen (default).\n//     Ps = 4  -> Turn off printer controller mode.\n//     Ps = 5  -> Turn on printer controller mode.\n// CSI ? Pm i\n//   Media Copy (MC, DEC-specific).\n//     Ps = 1  -> Print line containing cursor.\n//     Ps = 4  -> Turn off autoprint mode.\n//     Ps = 5  -> Turn on autoprint mode.\n//     Ps = 1  0  -> Print composed display, ignores DECPEX.\n//     Ps = 1  1  -> Print all pages.\nProgram.prototype.mc = Program.prototype.mediaCopy = function () {\n  return this._write('\\x1b[' + slice.call(arguments).join(';') + 'i');\n};\n\nProgram.prototype.print_screen =\n  Program.prototype.ps =\n  Program.prototype.mc0 =\n    function () {\n      if (this.tput) return this.put.mc0();\n      return this.mc('0');\n    };\n\nProgram.prototype.prtr_on =\n  Program.prototype.po =\n  Program.prototype.mc5 =\n    function () {\n      if (this.tput) return this.put.mc5();\n      return this.mc('5');\n    };\n\nProgram.prototype.prtr_off =\n  Program.prototype.pf =\n  Program.prototype.mc4 =\n    function () {\n      if (this.tput) return this.put.mc4();\n      return this.mc('4');\n    };\n\nProgram.prototype.prtr_non =\n  Program.prototype.pO =\n  Program.prototype.mc5p =\n    function () {\n      if (this.tput) return this.put.mc5p();\n      return this.mc('?5');\n    };\n\n// CSI > Ps; Ps m\n//   Set or reset resource-values used by xterm to decide whether\n//   to construct escape sequences holding information about the\n//   modifiers pressed with a given key.  The first parameter iden-\n//   tifies the resource to set/reset.  The second parameter is the\n//   value to assign to the resource.  If the second parameter is\n//   omitted, the resource is reset to its initial value.\n//     Ps = 1  -> modifyCursorKeys.\n//     Ps = 2  -> modifyFunctionKeys.\n//     Ps = 4  -> modifyOtherKeys.\n//   If no parameters are given, all resources are reset to their\n//   initial values.\nProgram.prototype.setResources = function () {\n  return this._write('\\x1b[>' + slice.call(arguments).join(';') + 'm');\n};\n\n// CSI > Ps n\n//   Disable modifiers which may be enabled via the CSI > Ps; Ps m\n//   sequence.  This corresponds to a resource value of \"-1\", which\n//   cannot be set with the other sequence.  The parameter identi-\n//   fies the resource to be disabled:\n//     Ps = 1  -> modifyCursorKeys.\n//     Ps = 2  -> modifyFunctionKeys.\n//     Ps = 4  -> modifyOtherKeys.\n//   If the parameter is omitted, modifyFunctionKeys is disabled.\n//   When modifyFunctionKeys is disabled, xterm uses the modifier\n//   keys to make an extended sequence of functions rather than\n//   adding a parameter to each function key to denote the modi-\n//   fiers.\nProgram.prototype.disableModifiers = function (param) {\n  return this._write('\\x1b[>' + (param || '') + 'n');\n};\n\n// CSI > Ps p\n//   Set resource value pointerMode.  This is used by xterm to\n//   decide whether to hide the pointer cursor as the user types.\n//   Valid values for the parameter:\n//     Ps = 0  -> never hide the pointer.\n//     Ps = 1  -> hide if the mouse tracking mode is not enabled.\n//     Ps = 2  -> always hide the pointer.  If no parameter is\n//     given, xterm uses the default, which is 1 .\nProgram.prototype.setPointerMode = function (param) {\n  return this._write('\\x1b[>' + (param || '') + 'p');\n};\n\n// CSI ! p   Soft terminal reset (DECSTR).\n// http://vt100.net/docs/vt220-rm/table4-10.html\nProgram.prototype.decstr =\n  Program.prototype.rs2 =\n  Program.prototype.softReset =\n    function () {\n      //if (this.tput) return this.put.init_2string();\n      //if (this.tput) return this.put.reset_2string();\n      if (this.tput) return this.put.rs2();\n      //return this._write('\\x1b[!p');\n      //return this._write('\\x1b[!p\\x1b[?3;4l\\x1b[4l\\x1b>'); // init\n      return this._write('\\x1b[!p\\x1b[?3;4l\\x1b[4l\\x1b>'); // reset\n    };\n\n// CSI Ps$ p\n//   Request ANSI mode (DECRQM).  For VT300 and up, reply is\n//     CSI Ps; Pm$ y\n//   where Ps is the mode number as in RM, and Pm is the mode\n//   value:\n//     0 - not recognized\n//     1 - set\n//     2 - reset\n//     3 - permanently set\n//     4 - permanently reset\nProgram.prototype.decrqm = Program.prototype.requestAnsiMode = function (\n  param\n) {\n  return this._write('\\x1b[' + (param || '') + '$p');\n};\n\n// CSI ? Ps$ p\n//   Request DEC private mode (DECRQM).  For VT300 and up, reply is\n//     CSI ? Ps; Pm$ p\n//   where Ps is the mode number as in DECSET, Pm is the mode value\n//   as in the ANSI DECRQM.\nProgram.prototype.decrqmp = Program.prototype.requestPrivateMode = function (\n  param\n) {\n  return this._write('\\x1b[?' + (param || '') + '$p');\n};\n\n// CSI Ps ; Ps \" p\n//   Set conformance level (DECSCL).  Valid values for the first\n//   parameter:\n//     Ps = 6 1  -> VT100.\n//     Ps = 6 2  -> VT200.\n//     Ps = 6 3  -> VT300.\n//   Valid values for the second parameter:\n//     Ps = 0  -> 8-bit controls.\n//     Ps = 1  -> 7-bit controls (always set for VT100).\n//     Ps = 2  -> 8-bit controls.\nProgram.prototype.decscl = Program.prototype.setConformanceLevel = function () {\n  return this._write('\\x1b[' + slice.call(arguments).join(';') + '\"p');\n};\n\n// CSI Ps q  Load LEDs (DECLL).\n//     Ps = 0  -> Clear all LEDS (default).\n//     Ps = 1  -> Light Num Lock.\n//     Ps = 2  -> Light Caps Lock.\n//     Ps = 3  -> Light Scroll Lock.\n//     Ps = 2  1  -> Extinguish Num Lock.\n//     Ps = 2  2  -> Extinguish Caps Lock.\n//     Ps = 2  3  -> Extinguish Scroll Lock.\nProgram.prototype.decll = Program.prototype.loadLEDs = function (param) {\n  return this._write('\\x1b[' + (param || '') + 'q');\n};\n\n// CSI Ps SP q\n//   Set cursor style (DECSCUSR, VT520).\n//     Ps = 0  -> blinking block.\n//     Ps = 1  -> blinking block (default).\n//     Ps = 2  -> steady block.\n//     Ps = 3  -> blinking underline.\n//     Ps = 4  -> steady underline.\nProgram.prototype.decscusr = Program.prototype.setCursorStyle = function (\n  param\n) {\n  switch (param) {\n    case 'blinking block':\n      param = 1;\n      break;\n    case 'block':\n    case 'steady block':\n      param = 2;\n      break;\n    case 'blinking underline':\n      param = 3;\n      break;\n    case 'underline':\n    case 'steady underline':\n      param = 4;\n      break;\n    case 'blinking bar':\n      param = 5;\n      break;\n    case 'bar':\n    case 'steady bar':\n      param = 6;\n      break;\n  }\n  if (param === 2 && this.has('Se')) {\n    return this.put.Se();\n  }\n  if (this.has('Ss')) {\n    return this.put.Ss(param);\n  }\n  return this._write('\\x1b[' + (param || 1) + ' q');\n};\n\n// CSI Ps \" q\n//   Select character protection attribute (DECSCA).  Valid values\n//   for the parameter:\n//     Ps = 0  -> DECSED and DECSEL can erase (default).\n//     Ps = 1  -> DECSED and DECSEL cannot erase.\n//     Ps = 2  -> DECSED and DECSEL can erase.\nProgram.prototype.decsca = Program.prototype.setCharProtectionAttr = function (\n  param\n) {\n  return this._write('\\x1b[' + (param || 0) + '\"q');\n};\n\n// CSI ? Pm r\n//   Restore DEC Private Mode Values.  The value of Ps previously\n//   saved is restored.  Ps values are the same as for DECSET.\nProgram.prototype.restorePrivateValues = function () {\n  return this._write('\\x1b[?' + slice.call(arguments).join(';') + 'r');\n};\n\n// CSI Pt; Pl; Pb; Pr; Ps$ r\n//   Change Attributes in Rectangular Area (DECCARA), VT400 and up.\n//     Pt; Pl; Pb; Pr denotes the rectangle.\n//     Ps denotes the SGR attributes to change: 0, 1, 4, 5, 7.\n// NOTE: xterm doesn't enable this code by default.\nProgram.prototype.deccara = Program.prototype.setAttrInRectangle = function () {\n  return this._write('\\x1b[' + slice.call(arguments).join(';') + '$r');\n};\n\n// CSI ? Pm s\n//   Save DEC Private Mode Values.  Ps values are the same as for\n//   DECSET.\nProgram.prototype.savePrivateValues = function () {\n  return this._write('\\x1b[?' + slice.call(arguments).join(';') + 's');\n};\n\n// CSI Ps ; Ps ; Ps t\n//   Window manipulation (from dtterm, as well as extensions).\n//   These controls may be disabled using the allowWindowOps\n//   resource.  Valid values for the first (and any additional\n//   parameters) are:\n//     Ps = 1  -> De-iconify window.\n//     Ps = 2  -> Iconify window.\n//     Ps = 3  ;  x ;  y -> Move window to [x, y].\n//     Ps = 4  ;  height ;  width -> Resize the xterm window to\n//     height and width in pixels.\n//     Ps = 5  -> Raise the xterm window to the front of the stack-\n//     ing order.\n//     Ps = 6  -> Lower the xterm window to the bottom of the\n//     stacking order.\n//     Ps = 7  -> Refresh the xterm window.\n//     Ps = 8  ;  height ;  width -> Resize the text area to\n//     [height;width] in characters.\n//     Ps = 9  ;  0  -> Restore maximized window.\n//     Ps = 9  ;  1  -> Maximize window (i.e., resize to screen\n//     size).\n//     Ps = 1 0  ;  0  -> Undo full-screen mode.\n//     Ps = 1 0  ;  1  -> Change to full-screen.\n//     Ps = 1 1  -> Report xterm window state.  If the xterm window\n//     is open (non-iconified), it returns CSI 1 t .  If the xterm\n//     window is iconified, it returns CSI 2 t .\n//     Ps = 1 3  -> Report xterm window position.  Result is CSI 3\n//     ; x ; y t\n//     Ps = 1 4  -> Report xterm window in pixels.  Result is CSI\n//     4  ;  height ;  width t\n//     Ps = 1 8  -> Report the size of the text area in characters.\n//     Result is CSI  8  ;  height ;  width t\n//     Ps = 1 9  -> Report the size of the screen in characters.\n//     Result is CSI  9  ;  height ;  width t\n//     Ps = 2 0  -> Report xterm window's icon label.  Result is\n//     OSC  L  label ST\n//     Ps = 2 1  -> Report xterm window's title.  Result is OSC  l\n//     label ST\n//     Ps = 2 2  ;  0  -> Save xterm icon and window title on\n//     stack.\n//     Ps = 2 2  ;  1  -> Save xterm icon title on stack.\n//     Ps = 2 2  ;  2  -> Save xterm window title on stack.\n//     Ps = 2 3  ;  0  -> Restore xterm icon and window title from\n//     stack.\n//     Ps = 2 3  ;  1  -> Restore xterm icon title from stack.\n//     Ps = 2 3  ;  2  -> Restore xterm window title from stack.\n//     Ps >= 2 4  -> Resize to Ps lines (DECSLPP).\nProgram.prototype.manipulateWindow = function () {\n  var args = slice.call(arguments);\n\n  var callback =\n    typeof args[args.length - 1] === 'function' ? args.pop() : function () {};\n\n  return this.response(\n    'window-manipulation',\n    '\\x1b[' + args.join(';') + 't',\n    callback\n  );\n};\n\nProgram.prototype.getWindowSize = function (callback) {\n  return this.manipulateWindow(18, callback);\n};\n\n// CSI Pt; Pl; Pb; Pr; Ps$ t\n//   Reverse Attributes in Rectangular Area (DECRARA), VT400 and\n//   up.\n//     Pt; Pl; Pb; Pr denotes the rectangle.\n//     Ps denotes the attributes to reverse, i.e.,  1, 4, 5, 7.\n// NOTE: xterm doesn't enable this code by default.\nProgram.prototype.decrara = Program.prototype.reverseAttrInRectangle =\n  function () {\n    return this._write('\\x1b[' + slice.call(arguments).join(';') + '$t');\n  };\n\n// CSI > Ps; Ps t\n//   Set one or more features of the title modes.  Each parameter\n//   enables a single feature.\n//     Ps = 0  -> Set window/icon labels using hexadecimal.\n//     Ps = 1  -> Query window/icon labels using hexadecimal.\n//     Ps = 2  -> Set window/icon labels using UTF-8.\n//     Ps = 3  -> Query window/icon labels using UTF-8.  (See dis-\n//     cussion of \"Title Modes\")\n// XXX VTE bizarelly echos this:\nProgram.prototype.setTitleModeFeature = function () {\n  return this._twrite('\\x1b[>' + slice.call(arguments).join(';') + 't');\n};\n\n// CSI Ps SP t\n//   Set warning-bell volume (DECSWBV, VT520).\n//     Ps = 0  or 1  -> off.\n//     Ps = 2 , 3  or 4  -> low.\n//     Ps = 5 , 6 , 7 , or 8  -> high.\nProgram.prototype.decswbv = Program.prototype.setWarningBellVolume = function (\n  param\n) {\n  return this._write('\\x1b[' + (param || '') + ' t');\n};\n\n// CSI Ps SP u\n//   Set margin-bell volume (DECSMBV, VT520).\n//     Ps = 1  -> off.\n//     Ps = 2 , 3  or 4  -> low.\n//     Ps = 0 , 5 , 6 , 7 , or 8  -> high.\nProgram.prototype.decsmbv = Program.prototype.setMarginBellVolume = function (\n  param\n) {\n  return this._write('\\x1b[' + (param || '') + ' u');\n};\n\n// CSI Pt; Pl; Pb; Pr; Pp; Pt; Pl; Pp$ v\n//   Copy Rectangular Area (DECCRA, VT400 and up).\n//     Pt; Pl; Pb; Pr denotes the rectangle.\n//     Pp denotes the source page.\n//     Pt; Pl denotes the target location.\n//     Pp denotes the target page.\n// NOTE: xterm doesn't enable this code by default.\nProgram.prototype.deccra = Program.prototype.copyRectangle = function () {\n  return this._write('\\x1b[' + slice.call(arguments).join(';') + '$v');\n};\n\n// CSI Pt ; Pl ; Pb ; Pr ' w\n//   Enable Filter Rectangle (DECEFR), VT420 and up.\n//   Parameters are [top;left;bottom;right].\n//   Defines the coordinates of a filter rectangle and activates\n//   it.  Anytime the locator is detected outside of the filter\n//   rectangle, an outside rectangle event is generated and the\n//   rectangle is disabled.  Filter rectangles are always treated\n//   as \"one-shot\" events.  Any parameters that are omitted default\n//   to the current locator position.  If all parameters are omit-\n//   ted, any locator motion will be reported.  DECELR always can-\n//   cels any prevous rectangle definition.\nProgram.prototype.decefr = Program.prototype.enableFilterRectangle =\n  function () {\n    return this._write('\\x1b[' + slice.call(arguments).join(';') + \"'w\");\n  };\n\n// CSI Ps x  Request Terminal Parameters (DECREQTPARM).\n//   if Ps is a \"0\" (default) or \"1\", and xterm is emulating VT100,\n//   the control sequence elicits a response of the same form whose\n//   parameters describe the terminal:\n//     Ps -> the given Ps incremented by 2.\n//     Pn = 1  <- no parity.\n//     Pn = 1  <- eight bits.\n//     Pn = 1  <- 2  8  transmit 38.4k baud.\n//     Pn = 1  <- 2  8  receive 38.4k baud.\n//     Pn = 1  <- clock multiplier.\n//     Pn = 0  <- STP flags.\nProgram.prototype.decreqtparm = Program.prototype.requestParameters = function (\n  param\n) {\n  return this._write('\\x1b[' + (param || 0) + 'x');\n};\n\n// CSI Ps x  Select Attribute Change Extent (DECSACE).\n//     Ps = 0  -> from start to end position, wrapped.\n//     Ps = 1  -> from start to end position, wrapped.\n//     Ps = 2  -> rectangle (exact).\nProgram.prototype.decsace = Program.prototype.selectChangeExtent = function (\n  param\n) {\n  return this._write('\\x1b[' + (param || 0) + 'x');\n};\n\n// CSI Pc; Pt; Pl; Pb; Pr$ x\n//   Fill Rectangular Area (DECFRA), VT420 and up.\n//     Pc is the character to use.\n//     Pt; Pl; Pb; Pr denotes the rectangle.\n// NOTE: xterm doesn't enable this code by default.\nProgram.prototype.decfra = Program.prototype.fillRectangle = function () {\n  return this._write('\\x1b[' + slice.call(arguments).join(';') + '$x');\n};\n\n// CSI Ps ; Pu ' z\n//   Enable Locator Reporting (DECELR).\n//   Valid values for the first parameter:\n//     Ps = 0  -> Locator disabled (default).\n//     Ps = 1  -> Locator enabled.\n//     Ps = 2  -> Locator enabled for one report, then disabled.\n//   The second parameter specifies the coordinate unit for locator\n//   reports.\n//   Valid values for the second parameter:\n//     Pu = 0  <- or omitted -> default to character cells.\n//     Pu = 1  <- device physical pixels.\n//     Pu = 2  <- character cells.\nProgram.prototype.decelr = Program.prototype.enableLocatorReporting =\n  function () {\n    return this._write('\\x1b[' + slice.call(arguments).join(';') + \"'z\");\n  };\n\n// CSI Pt; Pl; Pb; Pr$ z\n//   Erase Rectangular Area (DECERA), VT400 and up.\n//     Pt; Pl; Pb; Pr denotes the rectangle.\n// NOTE: xterm doesn't enable this code by default.\nProgram.prototype.decera = Program.prototype.eraseRectangle = function () {\n  return this._write('\\x1b[' + slice.call(arguments).join(';') + '$z');\n};\n\n// CSI Pm ' {\n//   Select Locator Events (DECSLE).\n//   Valid values for the first (and any additional parameters)\n//   are:\n//     Ps = 0  -> only respond to explicit host requests (DECRQLP).\n//                (This is default).  It also cancels any filter\n//   rectangle.\n//     Ps = 1  -> report button down transitions.\n//     Ps = 2  -> do not report button down transitions.\n//     Ps = 3  -> report button up transitions.\n//     Ps = 4  -> do not report button up transitions.\nProgram.prototype.decsle = Program.prototype.setLocatorEvents = function () {\n  return this._write('\\x1b[' + slice.call(arguments).join(';') + \"'{\");\n};\n\n// CSI Pt; Pl; Pb; Pr$ {\n//   Selective Erase Rectangular Area (DECSERA), VT400 and up.\n//     Pt; Pl; Pb; Pr denotes the rectangle.\nProgram.prototype.decsera = Program.prototype.selectiveEraseRectangle =\n  function () {\n    return this._write('\\x1b[' + slice.call(arguments).join(';') + '${');\n  };\n\n// CSI Ps ' |\n//   Request Locator Position (DECRQLP).\n//   Valid values for the parameter are:\n//     Ps = 0 , 1 or omitted -> transmit a single DECLRP locator\n//     report.\n\n//   If Locator Reporting has been enabled by a DECELR, xterm will\n//   respond with a DECLRP Locator Report.  This report is also\n//   generated on button up and down events if they have been\n//   enabled with a DECSLE, or when the locator is detected outside\n//   of a filter rectangle, if filter rectangles have been enabled\n//   with a DECEFR.\n\n//     -> CSI Pe ; Pb ; Pr ; Pc ; Pp &  w\n\n//   Parameters are [event;button;row;column;page].\n//   Valid values for the event:\n//     Pe = 0  -> locator unavailable - no other parameters sent.\n//     Pe = 1  -> request - xterm received a DECRQLP.\n//     Pe = 2  -> left button down.\n//     Pe = 3  -> left button up.\n//     Pe = 4  -> middle button down.\n//     Pe = 5  -> middle button up.\n//     Pe = 6  -> right button down.\n//     Pe = 7  -> right button up.\n//     Pe = 8  -> M4 button down.\n//     Pe = 9  -> M4 button up.\n//     Pe = 1 0  -> locator outside filter rectangle.\n//   ``button'' parameter is a bitmask indicating which buttons are\n//     pressed:\n//     Pb = 0  <- no buttons down.\n//     Pb & 1  <- right button down.\n//     Pb & 2  <- middle button down.\n//     Pb & 4  <- left button down.\n//     Pb & 8  <- M4 button down.\n//   ``row'' and ``column'' parameters are the coordinates of the\n//     locator position in the xterm window, encoded as ASCII deci-\n//     mal.\n//   The ``page'' parameter is not used by xterm, and will be omit-\n//   ted.\nProgram.prototype.decrqlp =\n  Program.prototype.req_mouse_pos =\n  Program.prototype.reqmp =\n  Program.prototype.requestLocatorPosition =\n    function (param, callback) {\n      // See also:\n      // get_mouse / getm / Gm\n      // mouse_info / minfo / Mi\n      // Correct for tput?\n      if (this.has('req_mouse_pos')) {\n        var code = this.tput.req_mouse_pos(param);\n        return this.response('locator-position', code, callback);\n      }\n      return this.response(\n        'locator-position',\n        '\\x1b[' + (param || '') + \"'|\",\n        callback\n      );\n    };\n\n// CSI P m SP }\n// Insert P s Column(s) (default = 1) (DECIC), VT420 and up.\n// NOTE: xterm doesn't enable this code by default.\nProgram.prototype.decic = Program.prototype.insertColumns = function () {\n  return this._write('\\x1b[' + slice.call(arguments).join(';') + ' }');\n};\n\n// CSI P m SP ~\n// Delete P s Column(s) (default = 1) (DECDC), VT420 and up\n// NOTE: xterm doesn't enable this code by default.\nProgram.prototype.decdc = Program.prototype.deleteColumns = function () {\n  return this._write('\\x1b[' + slice.call(arguments).join(';') + ' ~');\n};\n\nProgram.prototype.out = function (name) {\n  var args = Array.prototype.slice.call(arguments, 1);\n  this.ret = true;\n  var out = this[name].apply(this, args);\n  this.ret = false;\n  return out;\n};\n\nProgram.prototype.sigtstp = function (callback) {\n  var resume = this.pause();\n\n  process.once('SIGCONT', function () {\n    resume();\n    if (callback) callback();\n  });\n\n  process.kill(process.pid, 'SIGTSTP');\n};\n\nProgram.prototype.pause = function (callback) {\n  var self = this,\n    isAlt = this.isAlt,\n    mouseEnabled = this.mouseEnabled;\n\n  this.lsaveCursor('pause');\n  //this.csr(0, screen.height - 1);\n  if (isAlt) this.normalBuffer();\n  this.showCursor();\n  if (mouseEnabled) this.disableMouse();\n\n  var write = this.output.write;\n  this.output.write = function () {};\n  if (this.input.setRawMode) {\n    this.input.setRawMode(false);\n  }\n  this.input.pause();\n\n  return (this._resume = function () {\n    delete self._resume;\n\n    if (self.input.setRawMode) {\n      self.input.setRawMode(true);\n    }\n    self.input.resume();\n    self.output.write = write;\n\n    if (isAlt) self.alternateBuffer();\n    //self.csr(0, screen.height - 1);\n    if (mouseEnabled) self.enableMouse();\n    self.lrestoreCursor('pause', true);\n\n    if (callback) callback();\n  });\n};\n\nProgram.prototype.resume = function () {\n  if (this._resume) return this._resume();\n};\n\n/**\n * Helpers\n */\n\n// We could do this easier by just manipulating the _events object, or for\n// older versions of node, manipulating the array returned by listeners(), but\n// neither of these methods are guaranteed to work in future versions of node.\nfunction unshiftEvent(obj, event, listener) {\n  var listeners = obj.listeners(event);\n  obj.removeAllListeners(event);\n  obj.on(event, listener);\n  listeners.forEach(function (listener) {\n    obj.on(event, listener);\n  });\n}\n\nfunction merge(out) {\n  slice.call(arguments, 1).forEach(function (obj) {\n    Object.keys(obj).forEach(function (key) {\n      out[key] = obj[key];\n    });\n  });\n  return out;\n}\n\n/**\n * Expose\n */\n\nexport default Program;\n","// @ts-nocheck\n/**\n * events.js - event emitter for blessed\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\nconst slice = Array.prototype.slice;\n\n/**\n * Type definitions\n */\n\nimport { EventEmitter as NodeEventEmitter } from 'events';\nimport { EventEmitterInterface } from './types/index.d';\n\ntype Listener = (...args: any[]) => any;\n\ninterface ListenerWithOriginal extends Listener {\n  listener?: Listener;\n}\n\n/**\n * EventEmitter\n */\n\nfunction _EventEmitter(this: EventEmitterInterface): void {\n  this._events ??= {};\n}\n\nNodeEventEmitter.prototype.setMaxListeners = function (\n  this: EventEmitterInterface,\n  n: number\n): void {\n  this._maxListeners = n;\n};\n\nNodeEventEmitter.prototype.addListener = function (\n  this: EventEmitterInterface,\n  type: string,\n  listener: Listener\n): void {\n  this._events ??= {};\n  if (!this._events[type]) {\n    this._events[type] = listener;\n  } else if (typeof this._events[type] === 'function') {\n    this._events[type] = [this._events[type] as Listener, listener];\n  } else {\n    (this._events[type] as Listener[]).push(listener);\n  }\n  this._emit('newListener', [type, listener]);\n};\n\nNodeEventEmitter.prototype.on = NodeEventEmitter.prototype.addListener;\n\nNodeEventEmitter.prototype.removeListener = function (\n  this: EventEmitterInterface,\n  type: string,\n  listener: Listener\n): void {\n  if (!this._events) return;\n  const handler = this._events[type];\n  if (!handler) return;\n\n  if (typeof handler === 'function' || (handler as Listener[])?.length === 1) {\n    delete this._events[type];\n    this._emit('removeListener', [type, listener]);\n    return;\n  }\n\n  const handlers = handler as ListenerWithOriginal[];\n  for (let i = 0; i < handlers.length; i++) {\n    if (handlers[i] === listener || handlers[i]?.listener === listener) {\n      handlers.splice(i, 1);\n      this._emit('removeListener', [type, listener]);\n      return;\n    }\n  }\n};\n\nNodeEventEmitter.prototype.off = NodeEventEmitter.prototype.removeListener;\n\nNodeEventEmitter.prototype.removeAllListeners = function (\n  this: EventEmitterInterface,\n  type?: string\n): void {\n  if (!this._events) {\n    this._events = {};\n    return;\n  }\n  if (type) {\n    delete this._events[type];\n  } else {\n    this._events = {};\n  }\n};\n\nNodeEventEmitter.prototype.once = function (\n  this: EventEmitterInterface,\n  type: string,\n  listener: Listener\n): EventEmitterInterface {\n  const self = this;\n  function on(this: EventEmitterInterface, ...args: any[]): any {\n    self.removeListener(type, on);\n    return listener.apply(this, args);\n  }\n  (on as ListenerWithOriginal).listener = listener;\n  return this.on(type, on);\n};\n\nNodeEventEmitter.prototype.listeners = function (\n  this: EventEmitterInterface,\n  type: string\n): Listener[] {\n  if (!this._events) return [];\n  const handler = this._events?.[type];\n  return typeof handler === 'function'\n    ? [handler as Listener]\n    : (handler as Listener[]) || [];\n};\n\nNodeEventEmitter.prototype._emit = function (\n  this: EventEmitterInterface,\n  type: string,\n  args: any[]\n): any {\n  if (!this._events) return;\n  const handler = this._events?.[type];\n  let ret: any;\n\n  // if (type !== 'event') {\n  //   this._emit('event', [type.replace(/^element /, '')].concat(args));\n  // }\n\n  if (!handler) {\n    if (type === 'error') {\n      throw new args[0]();\n    }\n    return;\n  }\n\n  if (typeof handler === 'function') {\n    return handler?.apply(this, args);\n  }\n\n  const handlers = handler as Listener[];\n  for (let i = 0; i < handlers.length; i++) {\n    if (handlers[i]?.apply(this, args) === false) {\n      ret = false;\n    }\n  }\n\n  return ret !== false;\n};\n\nNodeEventEmitter.prototype.emit = function (\n  this: EventEmitterInterface,\n  type: string,\n  ..._eventArgs: any[]\n): boolean {\n  const args = slice.call(arguments, 1);\n  const params = slice.call(arguments);\n  let el: EventEmitterInterface | undefined = this;\n\n  this._emit('event', params);\n\n  if ((this as any).type === 'screen') {\n    return this._emit(type, args);\n  }\n\n  if (this._emit(type, args) === false) {\n    return false;\n  }\n\n  const elementType = 'element ' + String(type);\n  args.unshift(this);\n  // `element` prefix\n  // params = [elementType].concat(args);\n  // no `element` prefix\n  // params.splice(1, 0, this);\n\n  do {\n    // el._emit('event', params);\n    if (!el._events?.[elementType]) continue;\n    if (el._emit(elementType, args) === false) {\n      return false;\n    }\n  } while ((el = (el as any).parent));\n\n  return true;\n};\n\n// For hooking into the main EventEmitter if we want to.\n// Might be better to do things this way being that it\n// will always be compatible with node, not to mention\n// it gives us domain support as well.\n// Node.prototype._emit = Node.prototype.emit;\n// Node.prototype.emit = function(type) {\n//   var args, el;\n//\n//   if (this.type === 'screen') {\n//     return this._emit.apply(this, arguments);\n//   }\n//\n//   this._emit.apply(this, arguments);\n//   if (this._bubbleStopped) return false;\n//\n//   args = slice.call(arguments, 1);\n//   el = this;\n//\n//   args.unshift('element ' + type, this);\n//   this._bubbleStopped = false;\n//   //args.push(stopBubble);\n//\n//   do {\n//     if (!el._events || !el._events[type]) continue;\n//     el._emit.apply(el, args);\n//     if (this._bubbleStopped) return false;\n//   } while (el = el.parent);\n//\n//   return true;\n// };\n//\n// Node.prototype._addListener = Node.prototype.addListener;\n// Node.prototype.on =\n// Node.prototype.addListener = function(type, listener) {\n//   function on() {\n//     if (listener.apply(this, arguments) === false) {\n//       this._bubbleStopped = true;\n//     }\n//   }\n//   on.listener = listener;\n//   return this._addListener(type, on);\n// };\n\n/**\n * Expose\n */\n\nexport default NodeEventEmitter;\nexport { NodeEventEmitter as EventEmitter };\n","/**\n * unicode.ts - modern unicode utilities using npm packages\n * Copyright (c) 2025, Contributors (MIT License).\n * Replaces embedded unicode libraries with proper npm dependencies\n */\n\nimport * as eastasianwidth from 'eastasianwidth';\nimport * as unicode from 'unicode-properties';\n\n/**\n * Wide, Surrogates, and Combining\n */\n\nfunction charWidth(str: string | number, i?: number): number {\n  const point = typeof str !== 'number' ? codePointAt(str, i || 0) : str;\n\n  // nul\n  if (point === 0) return 0;\n\n  // tab\n  if (point === 0x09) {\n    // Default tab width is 8, can be overridden by environment variable\n    return +(process.env['BLESSED_TAB_WIDTH'] || 8);\n  }\n\n  // 8-bit control characters (2-width according to unicode??)\n  if (point < 32 || (point >= 0x7f && point < 0xa0)) {\n    return 0;\n  }\n\n  // Use unicode-properties to check for combining characters\n  if (\n    unicode.getCategory(point) === 'Mn' ||\n    unicode.getCategory(point) === 'Me' ||\n    unicode.getCategory(point) === 'Mc'\n  ) {\n    return 0;\n  }\n\n  // Use eastasianwidth package for proper width detection\n  const width = eastasianwidth.eastAsianWidth(String.fromCodePoint(point));\n\n  switch (width) {\n    case 'F': // Fullwidth\n    case 'W': // Wide\n      return 2;\n    case 'H': // Halfwidth\n    case 'Na': // Narrow\n    case 'N': // Neutral\n      return 1;\n    case 'A': // Ambiguous\n      // Handle CJK Ambiguous based on environment variable\n      if (process.env['NCURSES_CJK_WIDTH']) {\n        return +process.env['NCURSES_CJK_WIDTH'] || 1;\n      }\n      return 1;\n    default:\n      return 1;\n  }\n}\n\nfunction strWidth(str: string): number {\n  let width = 0;\n  for (let i = 0; i < str.length; i++) {\n    width += charWidth(str, i);\n    if (isSurrogate(str, i)) i++;\n  }\n  return width;\n}\n\nfunction isSurrogate(str: string | number, i?: number): boolean {\n  const point = typeof str !== 'number' ? codePointAt(str, i || 0) : str;\n  return point > 0x00ffff;\n}\n\n/**\n * Use unicode-properties for combining character detection\n */\nfunction isCombining(str: string | number, i?: number): boolean {\n  const point = typeof str !== 'number' ? codePointAt(str, i || 0) : str;\n\n  const category = unicode.getCategory(point);\n  return category === 'Mn' || category === 'Me' || category === 'Mc';\n}\n\n/**\n * Code Point Helpers - using native implementations when available\n */\n\nfunction codePointAt(str: string, position?: number): number {\n  if (str == null) {\n    throw TypeError();\n  }\n  const string = String(str);\n\n  // Use native implementation if available\n  if (string.codePointAt) {\n    return string.codePointAt(position || 0) || 0;\n  }\n\n  // Fallback implementation\n  const size = string.length;\n  const index = position ? Number(position) : 0;\n\n  if (index !== index) {\n    // better `isNaN`\n    return 0;\n  }\n\n  // Account for out-of-bounds indices:\n  if (index < 0 || index >= size) {\n    return 0;\n  }\n\n  // Get the first code unit\n  const first = string.charCodeAt(index);\n  let second;\n\n  if (\n    // check if it's the start of a surrogate pair\n    first >= 0xd800 &&\n    first <= 0xdbff && // high surrogate\n    size > index + 1 // there is a next code unit\n  ) {\n    second = string.charCodeAt(index + 1);\n    if (second >= 0xdc00 && second <= 0xdfff) {\n      // low surrogate\n      // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n      return (first - 0xd800) * 0x400 + second - 0xdc00 + 0x10000;\n    }\n  }\n\n  return first;\n}\n\nfunction fromCodePoint(...codePoints: number[]): string {\n  // Use native implementation if available\n  if (String.fromCodePoint) {\n    return String.fromCodePoint(...codePoints);\n  }\n\n  // Fallback implementation\n  const MAX_SIZE = 0x4000;\n  const codeUnits: number[] = [];\n  let highSurrogate: number;\n  let lowSurrogate: number;\n  let index = -1;\n  const length = codePoints.length;\n\n  if (!length) {\n    return '';\n  }\n\n  let result = '';\n\n  while (++index < length) {\n    const codePoint = Number(codePoints[index]);\n\n    if (\n      !isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity`\n      codePoint < 0 || // not a valid Unicode code point\n      codePoint > 0x10ffff || // not a valid Unicode code point\n      Math.floor(codePoint) !== codePoint // not an integer\n    ) {\n      throw RangeError('Invalid code point: ' + codePoint);\n    }\n\n    if (codePoint <= 0xffff) {\n      // BMP code point\n      codeUnits.push(codePoint);\n    } else {\n      // Astral code point; split in surrogate halves\n      // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n      const adjustedCodePoint = codePoint - 0x10000;\n      highSurrogate = (adjustedCodePoint >> 10) + 0xd800;\n      lowSurrogate = (adjustedCodePoint % 0x400) + 0xdc00;\n      codeUnits.push(highSurrogate, lowSurrogate);\n    }\n\n    if (index + 1 === length || codeUnits.length > MAX_SIZE) {\n      result += String.fromCharCode(...codeUnits);\n      codeUnits.length = 0;\n    }\n  }\n\n  return result;\n}\n\n/**\n * Regexes for compatibility\n */\n\nconst chars = {\n  // Double width characters that are _not_ surrogate pairs.\n  wide: new RegExp(\n    '([' +\n      '\\\\u1100-\\\\u115f' + // Hangul Jamo init. consonants\n      '\\\\u2329\\\\u232a' +\n      '\\\\u2e80-\\\\u303e\\\\u3040-\\\\ua4cf' + // CJK ... Yi\n      '\\\\uac00-\\\\ud7a3' + // Hangul Syllables\n      '\\\\uf900-\\\\ufaff' + // CJK Compatibility Ideographs\n      '\\\\ufe10-\\\\ufe19' + // Vertical forms\n      '\\\\ufe30-\\\\ufe6f' + // CJK Compatibility Forms\n      '\\\\uff00-\\\\uff60' + // Fullwidth Forms\n      '\\\\uffe0-\\\\uffe6' +\n      '])',\n    'g'\n  ),\n\n  // All surrogate pair wide chars.\n  swide: new RegExp(\n    '(' +\n      // 0x20000 - 0x2fffd:\n      '[\\\\ud840-\\\\ud87f][\\\\udc00-\\\\udffd]' +\n      '|' +\n      // 0x30000 - 0x3fffd:\n      '[\\\\ud880-\\\\ud8bf][\\\\udc00-\\\\udffd]' +\n      ')',\n    'g'\n  ),\n\n  // Regex to detect a surrogate pair.\n  surrogate: /[\\ud800-\\udbff][\\udc00-\\udfff]/g,\n\n  // Basic combining regex (simplified, using unicode-properties for actual detection)\n  combining:\n    /[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1-\\u05c2\\u05c4-\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065f\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7-\\u06e8\\u06ea-\\u06ed]/g,\n};\n\n// All wide chars including surrogate pairs.\nconst charsWithAll = {\n  ...chars,\n  all: new RegExp(\n    '(' +\n      chars.swide.source.slice(1, -1) +\n      '|' +\n      chars.wide.source.slice(1, -1) +\n      ')',\n    'g'\n  ),\n};\n\n// Backward compatibility - these were exports in the original\n\n// Legacy export compatibility\nconst combining = {};\nconst combiningTable: number[][] = [];\n\n// Initialize combining lookup for backward compatibility\nfunction initializeCombining() {\n  for (let i = 0; i <= 0x10ffff; i++) {\n    const category = unicode.getCategory(i);\n    if (category === 'Mn' || category === 'Me' || category === 'Mc') {\n      (combining as any)[i] = true;\n    }\n  }\n}\n\n// Lazy initialization\nlet combiningInitialized = false;\n\nfunction ensureCombiningInitialized() {\n  if (!combiningInitialized) {\n    initializeCombining();\n    combiningInitialized = true;\n  }\n}\n\n// Legacy exports for CommonJS compatibility\nconst combiningProxy = new Proxy(\n  {},\n  {\n    get(_target, prop) {\n      ensureCombiningInitialized();\n      return (combining as any)[prop];\n    },\n  }\n);\n\n// Export everything properly for ESM\nexport {\n  charWidth,\n  strWidth,\n  isSurrogate,\n  isCombining,\n  codePointAt,\n  fromCodePoint,\n  charsWithAll as chars,\n  combiningProxy as combining,\n  combiningTable,\n};\n","/**\n * box.js - box element for blessed\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\n/**\n * Modules\n */\n\nimport BlessedElement from './element.js';\n\n/**\n * Type definitions\n */\n\nimport { BoxOptions, BoxInterface } from '../types/index';\n\n/**\n * Box - Modern ES6 Class\n */\n\nclass Box extends BlessedElement {\n  type = 'box';\n\n  constructor(options?: BoxOptions) {\n    // Handle malformed options gracefully\n    if (!options || typeof options !== 'object' || Array.isArray(options)) {\n      options = {};\n    }\n\n    super(options);\n  }\n}\n\n/**\n * Factory function for backward compatibility\n */\nfunction box(options?: BoxOptions): BoxInterface {\n  return new Box(options) as BoxInterface;\n}\n\n// Attach the class as a property for direct access\nbox.Box = Box;\n\n/**\n * Expose\n */\n\nexport default box;\n","/**\n * element.js - base element for blessed\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\n/**\n * Modules\n */\n\nimport assert from 'assert';\n\nimport * as colors from '../colors.js';\nimport * as unicode from '../unicode.js';\n\nvar nextTick = global.setImmediate || process.nextTick.bind(process);\n\nimport * as helpers from '../helpers.js';\n\nimport Node from './node.js';\n\n// Lazy imports to avoid circular dependencies\nlet Box: any;\nlet ScrollableBox: any;\n\n/**\n * Interfaces\n */\n\ninterface ElementOptions {\n  scrollable?: boolean;\n  position?: any;\n  content?: string;\n  tags?: boolean;\n  label?: string;\n  hoverText?: string;\n  align?: 'left' | 'center' | 'right';\n  valign?: 'top' | 'middle' | 'bottom';\n  shrink?: boolean;\n  padding?: any;\n  margin?: any;\n  border?: any;\n  style?: any;\n  hidden?: boolean;\n  fixed?: boolean;\n  top?: number | string;\n  left?: number | string;\n  right?: number | string;\n  bottom?: number | string;\n  width?: number | string;\n  height?: number | string;\n  clickable?: boolean;\n  keyable?: boolean;\n  focused?: boolean;\n  mouse?: boolean;\n  keys?: boolean;\n  vi?: boolean;\n  ignoreKeys?: boolean;\n  alwaysScroll?: boolean;\n  scrollbar?: any;\n  track?: any;\n  wrap?: boolean;\n  draggable?: boolean;\n  shadow?: boolean;\n  [key: string]: any;\n}\n\ninterface ElementInterface extends Node {\n  type: string;\n  _ignore?: boolean;\n  position: any;\n  content: string;\n  hidden: boolean;\n  visible: boolean;\n  detached: boolean;\n\n  // Positioning and sizing\n  aleft: number;\n  aright: number;\n  atop: number;\n  abottom: number;\n  width: number;\n  height: number;\n  iwidth: number;\n  iheight: number;\n  ileft: number;\n  iright: number;\n  itop: number;\n  ibottom: number;\n\n  // Various element properties\n  parseTags?: boolean;\n  label?: any;\n  border?: any;\n  style?: any;\n  padding?: any;\n  margin?: any;\n  lpos?: any;\n\n  // Methods (key ones for now)\n  hide(): void;\n  show(): void;\n  toggle(): void;\n  focus(): void;\n  key(key: string | string[], listener: Function): void;\n  onceKey(key: string | string[], listener: Function): void;\n  unkey(key: string | string[], listener?: Function): void;\n  onScreenEvent(type: string, listener: Function): void;\n  removeScreenEvent(type: string, listener: Function): void;\n  render(): any;\n  setContent(content: string): void;\n  getContent(): string;\n  insertLine(i: number, line: string): void;\n  deleteLine(i: number): void;\n  getBaseLine(i: number): string;\n  setBaseLine(i: number, line: string): void;\n  insertTop(line: string): void;\n  insertBottom(line: string): void;\n  deleteTop(): void;\n  deleteBottom(): void;\n  unshiftLine(line: string): void;\n  shiftLine(): string;\n  pushLine(line: string): void;\n  popLine(): string;\n  getLines(): string[];\n  getScreenLines(): string[];\n  strWidth(text: string): number;\n}\n\n/**\n * Element\n */\n\nfunction Element(this: ElementInterface, options?: ElementOptions) {\n  var self = this;\n\n  if (!(this instanceof Node)) {\n    return new Element(options);\n  }\n\n  // Handle malformed options gracefully - ensure it's always an object\n  if (!options || typeof options !== 'object' || Array.isArray(options)) {\n    options = {};\n  }\n\n  // Workaround to get a `scrollable` option.\n  // DISABLED: ScrollableBox mixin approach causes circular dependency issues in ESM\n  // Individual widgets that need scrollability should extend ScrollableBox/ScrollableText directly\n  if (\n    // eslint-disable-next-line no-constant-condition, no-constant-binary-expression\n    false &&\n    options.scrollable &&\n    !this._ignore &&\n    this.type !== 'scrollable-box'\n  ) {\n    // Mixin code disabled\n  }\n\n  Node.call(this, options);\n\n  this.name = options.name;\n\n  options.position = options.position || {\n    left: options.left,\n    right: options.right,\n    top: options.top,\n    bottom: options.bottom,\n    width: options.width,\n    height: options.height,\n  };\n\n  if (\n    options.position.width === 'shrink' ||\n    options.position.height === 'shrink'\n  ) {\n    if (options.position.width === 'shrink') {\n      delete options.position.width;\n    }\n    if (options.position.height === 'shrink') {\n      delete options.position.height;\n    }\n    options.shrink = true;\n  }\n\n  this.position = options.position;\n\n  this.noOverflow = options.noOverflow;\n  this.dockBorders = options.dockBorders;\n  this.shadow = options.shadow;\n\n  this.style = options.style;\n\n  if (!this.style) {\n    this.style = {};\n    this.style.fg = options.fg;\n    this.style.bg = options.bg;\n    this.style.bold = options.bold;\n    this.style.underline = options.underline;\n    this.style.blink = options.blink;\n    this.style.inverse = options.inverse;\n    this.style.invisible = options.invisible;\n    this.style.transparent = options.transparent;\n  }\n\n  this.hidden = options.hidden === true;\n  this.fixed = options.fixed === true;\n  this.align = options.align || 'left';\n  this.valign = options.valign || 'top';\n  this.wrap = options.wrap !== false;\n  this.shrink = options.shrink;\n  this.ch = options.ch || ' ';\n\n  if (typeof options.padding === 'number' || !options.padding) {\n    options.padding = {\n      left: options.padding,\n      top: options.padding,\n      right: options.padding,\n      bottom: options.padding,\n    };\n  }\n\n  this.padding = {\n    left: options.padding.left || 0,\n    top: options.padding.top || 0,\n    right: options.padding.right || 0,\n    bottom: options.padding.bottom || 0,\n  };\n\n  this.border = options.border;\n  if (this.border) {\n    if (typeof this.border === 'string') {\n      this.border = { type: this.border };\n    }\n    this.border.type = this.border.type || 'bg';\n    if (this.border.type === 'ascii') this.border.type = 'line';\n    this.border.ch = this.border.ch || ' ';\n    this.style.border = this.style.border || this.border.style;\n    if (!this.style.border) {\n      this.style.border = {};\n      this.style.border.fg = this.border.fg;\n      this.style.border.bg = this.border.bg;\n    }\n    //this.border.style = this.style.border;\n    if (this.border.left == null) this.border.left = true;\n    if (this.border.top == null) this.border.top = true;\n    if (this.border.right == null) this.border.right = true;\n    if (this.border.bottom == null) this.border.bottom = true;\n  }\n\n  // if (options.mouse || options.clickable) {\n  if (options.clickable) {\n    this.screen._listenMouse(this);\n  }\n\n  if (options.input || options.keyable) {\n    this.screen._listenKeys(this);\n  }\n\n  this.parseTags = options.parseTags || options.tags;\n\n  this.setContent(options.content || '', true);\n\n  if (options.label) {\n    this.setLabel(options.label);\n  }\n\n  if (options.hoverText) {\n    this.setHover(options.hoverText);\n  }\n\n  // TODO: Possibly move this to Node for onScreenEvent('mouse', ...).\n  this.on('newListener', function fn(type) {\n    // type = type.split(' ').slice(1).join(' ');\n    if (\n      type === 'mouse' ||\n      type === 'click' ||\n      type === 'mouseover' ||\n      type === 'mouseout' ||\n      type === 'mousedown' ||\n      type === 'mouseup' ||\n      type === 'mousewheel' ||\n      type === 'wheeldown' ||\n      type === 'wheelup' ||\n      type === 'mousemove'\n    ) {\n      self.screen._listenMouse(self);\n    } else if (type === 'keypress' || type.indexOf('key ') === 0) {\n      self.screen._listenKeys(self);\n    }\n  });\n\n  this.on('resize', function () {\n    self.parseContent();\n  });\n\n  this.on('attach', function () {\n    self.parseContent();\n  });\n\n  this.on('detach', function () {\n    delete self.lpos;\n  });\n\n  if (options.hoverBg != null) {\n    options.hoverEffects = options.hoverEffects || {};\n    options.hoverEffects.bg = options.hoverBg;\n  }\n\n  if (this.style.hover) {\n    options.hoverEffects = this.style.hover;\n  }\n\n  if (this.style.focus) {\n    options.focusEffects = this.style.focus;\n  }\n\n  if (options.effects) {\n    if (options.effects.hover) options.hoverEffects = options.effects.hover;\n    if (options.effects.focus) options.focusEffects = options.effects.focus;\n  }\n\n  [\n    ['hoverEffects', 'mouseover', 'mouseout', '_htemp'],\n    ['focusEffects', 'focus', 'blur', '_ftemp'],\n  ].forEach(function (props) {\n    var pname = props[0],\n      over = props[1],\n      out = props[2],\n      temp = props[3];\n    self.screen.setEffects(self, self, over, out, self.options[pname], temp);\n  });\n\n  if (this.options.draggable) {\n    this.draggable = true;\n  }\n\n  if (options.focused) {\n    this.focus();\n  }\n}\n\nElement.prototype.__proto__ = Node.prototype;\n\nElement.prototype.type = 'element';\n\nElement.prototype.__defineGetter__('focused', function () {\n  return this.screen.focused === this;\n});\n\nElement.prototype.sattr = function (\n  this: ElementInterface,\n  style?: any,\n  fg?: any,\n  bg?: any\n): number {\n  var bold = style.bold,\n    underline = style.underline,\n    blink = style.blink,\n    inverse = style.inverse,\n    invisible = style.invisible;\n\n  // if (arguments.length === 1) {\n  if (fg == null && bg == null) {\n    fg = style.fg;\n    bg = style.bg;\n  }\n\n  // This used to be a loop, but I decided\n  // to unroll it for performance's sake.\n  if (typeof bold === 'function') bold = bold(this);\n  if (typeof underline === 'function') underline = underline(this);\n  if (typeof blink === 'function') blink = blink(this);\n  if (typeof inverse === 'function') inverse = inverse(this);\n  if (typeof invisible === 'function') invisible = invisible(this);\n\n  if (typeof fg === 'function') fg = fg(this);\n  if (typeof bg === 'function') bg = bg(this);\n\n  // Updated for 24-bit color support using new format:\n  // bg + (fg * 2^24) + (flags * 2^48)\n  var flags = 0;\n  if (invisible) flags |= 16;\n  if (inverse) flags |= 8;\n  if (blink) flags |= 4;\n  if (underline) flags |= 2;\n  if (bold) flags |= 1;\n\n  var fgColor = colors.convert(fg);\n  var bgColor = colors.convert(bg);\n\n  // Pack into new format using Math operations for large numbers\n  return bgColor + fgColor * 0x1000000 + flags * 0x1000000000000;\n};\n\nElement.prototype.onScreenEvent = function (\n  this: ElementInterface,\n  type: string,\n  handler: Function\n): void {\n  var listeners = (this._slisteners = this._slisteners || []);\n  listeners.push({ type: type, handler: handler });\n  this.screen.on(type, handler);\n};\n\nElement.prototype.onceScreenEvent = function (\n  this: ElementInterface,\n  type: string,\n  handler: Function\n): void {\n  var listeners = (this._slisteners = this._slisteners || []);\n  var entry = { type: type, handler: handler };\n  listeners.push(entry);\n  this.screen.once(type, function () {\n    var i = listeners.indexOf(entry);\n    if (~i) listeners.splice(i, 1);\n    return handler.apply(this, arguments);\n  });\n};\n\nElement.prototype.removeScreenEvent = function (\n  this: ElementInterface,\n  type: string,\n  handler: Function\n): void {\n  var listeners = (this._slisteners = this._slisteners || []);\n  for (var i = 0; i < listeners.length; i++) {\n    var listener = listeners[i];\n    if (listener.type === type && listener.handler === handler) {\n      listeners.splice(i, 1);\n      if (this._slisteners.length === 0) {\n        delete this._slisteners;\n      }\n      break;\n    }\n  }\n  this.screen.removeListener(type, handler);\n};\n\nElement.prototype.free = function (this: ElementInterface): void {\n  var listeners = (this._slisteners = this._slisteners || []);\n  for (var i = 0; i < listeners.length; i++) {\n    var listener = listeners[i];\n    this.screen.removeListener(listener.type, listener.handler);\n  }\n  delete this._slisteners;\n};\n\nElement.prototype.hide = function (this: ElementInterface): void {\n  if (this.hidden) return;\n  this.clearPos();\n  this.hidden = true;\n  this.emit('hide');\n  if (this.screen.focused === this) {\n    this.screen.rewindFocus();\n  }\n};\n\nElement.prototype.show = function (this: ElementInterface): void {\n  if (!this.hidden) return;\n  this.hidden = false;\n  this.emit('show');\n};\n\nElement.prototype.toggle = function (this: ElementInterface): void {\n  return this.hidden ? this.show() : this.hide();\n};\n\nElement.prototype.focus = function (this: ElementInterface): void {\n  return (this.screen.focused = this);\n};\n\nElement.prototype.setContent = function (\n  this: ElementInterface,\n  content: string,\n  noClear?: boolean,\n  noTags?: boolean\n): void {\n  if (!noClear) this.clearPos();\n  this.content = content || '';\n  this.parseContent(noTags);\n  this.emit('set content');\n};\n\nElement.prototype.getContent = function (this: ElementInterface): string {\n  if (!this._clines) return '';\n  return this._clines.fake.join('\\n');\n};\n\nElement.prototype.setText = function (\n  this: ElementInterface,\n  content: string,\n  noClear?: boolean\n): void {\n  content = content || '';\n  content = content.replace(/\\x1b\\[[\\d;]*m/g, '');\n  return this.setContent(content, noClear, true);\n};\n\nElement.prototype.getText = function (this: ElementInterface): string {\n  return this.getContent().replace(/\\x1b\\[[\\d;]*m/g, '');\n};\n\nElement.prototype.parseContent = function (\n  this: ElementInterface,\n  noTags?: boolean\n): any {\n  if (this.detached) return false;\n\n  var width = this.width - this.iwidth;\n  if (\n    this._clines == null ||\n    this._clines.width !== width ||\n    this._clines.content !== this.content\n  ) {\n    var content = this.content;\n\n    content = content\n      .replace(/[\\x00-\\x08\\x0b-\\x0c\\x0e-\\x1a\\x1c-\\x1f\\x7f]/g, '')\n      .replace(/\\x1b(?!\\[[\\d;]*m)/g, '')\n      .replace(/\\r\\n|\\r/g, '\\n')\n      .replace(/\\t/g, this.screen.tabc);\n\n    if (this.screen.fullUnicode) {\n      // double-width chars will eat the next char after render. create a\n      // blank character after it so it doesn't eat the real next char.\n      content = content.replace(unicode.chars.all, '$1\\x03');\n      // iTerm2 cannot render combining characters properly.\n      if (this.screen.program.isiTerm2) {\n        content = content.replace(unicode.chars.combining, '');\n      }\n    } else {\n      // no double-width: replace them with question-marks.\n      content = content.replace(unicode.chars.all, '??');\n      // delete combining characters since they're 0-width anyway.\n      // NOTE: We could drop this, the non-surrogates would get changed to ? by\n      // the unicode filter, and surrogates changed to ? by the surrogate\n      // regex. however, the user might expect them to be 0-width.\n      // NOTE: Might be better for performance to drop!\n      content = content.replace(unicode.chars.combining, '');\n      // no surrogate pairs: replace them with question-marks.\n      content = content.replace(unicode.chars.surrogate, '?');\n      // XXX Deduplicate code here:\n      // content = helpers.dropUnicode(content);\n    }\n\n    if (!noTags) {\n      content = this._parseTags(content);\n    }\n\n    this._clines = this._wrapContent(content, width);\n    this._clines.width = width;\n    this._clines.content = this.content;\n    this._clines.attr = this._parseAttr(this._clines);\n    this._clines.ci = [];\n    this._clines.reduce(\n      function (total, line) {\n        this._clines.ci.push(total);\n        return total + line.length + 1;\n      }.bind(this),\n      0\n    );\n\n    this._pcontent = this._clines.join('\\n');\n    this.emit('parsed content');\n\n    return true;\n  }\n\n  // Need to calculate this every time because the default fg/bg may change.\n  this._clines.attr = this._parseAttr(this._clines) || this._clines.attr;\n\n  return false;\n};\n\n// Convert `{red-fg}foo{/red-fg}` to `\\x1b[31mfoo\\x1b[39m`.\nElement.prototype._parseTags = function (text) {\n  if (!this.parseTags) return text;\n  if (!/{\\/?[\\w\\-,;!#]*}/.test(text)) return text;\n\n  var program = this.screen.program,\n    out = '',\n    state,\n    bg = [],\n    fg = [],\n    flag = [],\n    cap,\n    slash,\n    param,\n    attr,\n    esc;\n\n  for (;;) {\n    if (!esc && (cap = /^{escape}/.exec(text))) {\n      text = text.substring(cap[0].length);\n      esc = true;\n      continue;\n    }\n\n    if (esc && (cap = /^([\\s\\S]+?){\\/escape}/.exec(text))) {\n      text = text.substring(cap[0].length);\n      out += cap[1];\n      esc = false;\n      continue;\n    }\n\n    if (esc) {\n      // throw new Error('Unterminated escape tag.');\n      out += text;\n      break;\n    }\n\n    if ((cap = /^{(\\/?)([\\w\\-,;!#]*)}/.exec(text))) {\n      text = text.substring(cap[0].length);\n      slash = cap[1] === '/';\n      param = cap[2].replace(/-/g, ' ');\n\n      if (param === 'open') {\n        out += '{';\n        continue;\n      } else if (param === 'close') {\n        out += '}';\n        continue;\n      }\n\n      if (param.slice(-3) === ' bg') state = bg;\n      else if (param.slice(-3) === ' fg') state = fg;\n      else state = flag;\n\n      if (slash) {\n        if (!param) {\n          out += program._attr('normal');\n          bg.length = 0;\n          fg.length = 0;\n          flag.length = 0;\n        } else {\n          attr = program._attr(param, false);\n          if (attr == null) {\n            out += cap[0];\n          } else {\n            // if (param !== state[state.length - 1]) {\n            //   throw new Error('Misnested tags.');\n            // }\n            state.pop();\n            if (state.length) {\n              out += program._attr(state[state.length - 1]);\n            } else {\n              out += attr;\n            }\n          }\n        }\n      } else {\n        if (!param) {\n          out += cap[0];\n        } else {\n          attr = program._attr(param);\n          if (attr == null) {\n            out += cap[0];\n          } else {\n            state.push(param);\n            out += attr;\n          }\n        }\n      }\n\n      continue;\n    }\n\n    if ((cap = /^[\\s\\S]+?(?={\\/?[\\w\\-,;!#]*})/.exec(text))) {\n      text = text.substring(cap[0].length);\n      out += cap[0];\n      continue;\n    }\n\n    out += text;\n    break;\n  }\n\n  return out;\n};\n\nElement.prototype._parseAttr = function (lines) {\n  var dattr = this.sattr(this.style),\n    attr = dattr,\n    attrs = [],\n    line,\n    i,\n    j,\n    c;\n\n  if (\n    Array.isArray(lines.attr) &&\n    lines.attr.length > 0 &&\n    lines.attr[0] === attr\n  ) {\n    return;\n  }\n\n  for (j = 0; j < lines.length; j++) {\n    line = lines[j];\n    attrs[j] = attr;\n    for (i = 0; i < line.length; i++) {\n      if (line[i] === '\\x1b') {\n        if ((c = /^\\x1b\\[[\\d;]*m/.exec(line.substring(i)))) {\n          attr = this.screen.attrCode(c[0], attr, dattr);\n          i += c[0].length - 1;\n        }\n      }\n    }\n  }\n\n  return attrs;\n};\n\nElement.prototype._align = function (line, width, align) {\n  if (!align) return line;\n  //if (!align && !~line.indexOf('{|}')) return line;\n\n  var cline = line.replace(/\\x1b\\[[\\d;]*m/g, ''),\n    len = cline.length,\n    s = width - len;\n\n  if (this.shrink) {\n    s = 0;\n  }\n\n  if (len === 0) return line;\n  if (s < 0) return line;\n\n  if (align === 'center') {\n    s = Array(((s / 2) | 0) + 1).join(' ');\n    return s + line + s;\n  } else if (align === 'right') {\n    s = Array(s + 1).join(' ');\n    return s + line;\n  } else if (this.parseTags && ~line.indexOf('{|}')) {\n    var parts = line.split('{|}');\n    var cparts = cline.split('{|}');\n    s = Math.max(width - cparts[0].length - cparts[1].length, 0);\n    s = Array(s + 1).join(' ');\n    return parts[0] + s + parts[1];\n  }\n\n  return line;\n};\n\nElement.prototype._wrapContent = function (content, width) {\n  var tags = this.parseTags,\n    state = this.align,\n    wrap = this.wrap,\n    margin = 0,\n    rtof = [],\n    ftor = [],\n    out = [],\n    no = 0,\n    line,\n    align,\n    cap,\n    total,\n    i,\n    part,\n    j,\n    lines,\n    rest;\n\n  lines = content.split('\\n');\n\n  if (!content) {\n    out.push(content);\n    out.rtof = [0];\n    out.ftor = [[0]];\n    out.fake = lines;\n    out.real = out;\n    out.mwidth = 0;\n    return out;\n  }\n\n  if (this.scrollbar) margin++;\n  if (this.type === 'textarea') margin++;\n  if (width > margin) width -= margin;\n\n  main: for (; no < lines.length; no++) {\n    line = lines[no];\n    align = state;\n\n    ftor.push([]);\n\n    // Handle alignment tags.\n    if (tags) {\n      if ((cap = /^{(left|center|right)}/.exec(line))) {\n        line = line.substring(cap[0].length);\n        align = state = cap[1] !== 'left' ? cap[1] : null;\n      }\n      if ((cap = /{\\/(left|center|right)}$/.exec(line))) {\n        line = line.slice(0, -cap[0].length);\n        //state = null;\n        state = this.align;\n      }\n    }\n\n    // If the string is apparently too long, wrap it.\n    while (line.length > width) {\n      // Measure the real width of the string.\n      for (i = 0, total = 0; i < line.length; i++) {\n        while (line[i] === '\\x1b') {\n          while (line[i] && line[i++] !== 'm');\n        }\n        if (!line[i]) break;\n        if (++total === width) {\n          // If we're not wrapping the text, we have to finish up the rest of\n          // the control sequences before cutting off the line.\n          i++;\n          if (!wrap) {\n            rest = line.substring(i).match(/\\x1b\\[[^m]*m/g);\n            rest = rest ? rest.join('') : '';\n            out.push(this._align(line.substring(0, i) + rest, width, align));\n            ftor[no].push(out.length - 1);\n            rtof.push(no);\n            continue main;\n          }\n          if (!this.screen.fullUnicode) {\n            // Try to find a space to break on.\n            if (i !== line.length) {\n              j = i;\n              while (j > i - 10 && j > 0 && line[--j] !== ' ');\n              if (line[j] === ' ') i = j + 1;\n            }\n          } else {\n            // Try to find a character to break on.\n            if (i !== line.length) {\n              // <XXX>\n              // Compensate for surrogate length\n              // counts on wrapping (experimental):\n              // NOTE: Could optimize this by putting\n              // it in the parent for loop.\n              if (unicode.isSurrogate(line, i)) i--;\n              for (var s = 0, n = 0; n < i; n++) {\n                if (unicode.isSurrogate(line, n)) s++, n++;\n              }\n              i += s;\n              // </XXX>\n              j = i;\n              // Break _past_ space.\n              // Break _past_ double-width chars.\n              // Break _past_ surrogate pairs.\n              // Break _past_ combining chars.\n              while (j > i - 10 && j > 0) {\n                j--;\n                if (\n                  line[j] === ' ' ||\n                  line[j] === '\\x03' ||\n                  (unicode.isSurrogate(line, j - 1) &&\n                    line[j + 1] !== '\\x03') ||\n                  unicode.isCombining(line, j)\n                ) {\n                  break;\n                }\n              }\n              if (\n                line[j] === ' ' ||\n                line[j] === '\\x03' ||\n                (unicode.isSurrogate(line, j - 1) && line[j + 1] !== '\\x03') ||\n                unicode.isCombining(line, j)\n              ) {\n                i = j + 1;\n              }\n            }\n          }\n          break;\n        }\n      }\n\n      part = line.substring(0, i);\n      line = line.substring(i);\n\n      out.push(this._align(part, width, align));\n      ftor[no].push(out.length - 1);\n      rtof.push(no);\n\n      // Make sure we didn't wrap the line to the very end, otherwise\n      // we get a pointless empty line after a newline.\n      if (line === '') continue main;\n\n      // If only an escape code got cut off, at it to `part`.\n      if (/^(?:\\x1b[\\[\\d;]*m)+$/.test(line)) {\n        out[out.length - 1] += line;\n        continue main;\n      }\n    }\n\n    out.push(this._align(line, width, align));\n    ftor[no].push(out.length - 1);\n    rtof.push(no);\n  }\n\n  out.rtof = rtof;\n  out.ftor = ftor;\n  out.fake = lines;\n  out.real = out;\n\n  out.mwidth = out.reduce(function (current, line) {\n    line = line.replace(/\\x1b\\[[\\d;]*m/g, '');\n    return line.length > current ? line.length : current;\n  }, 0);\n\n  return out;\n};\n\nElement.prototype.__defineGetter__('visible', function () {\n  var el = this;\n  do {\n    if (el.detached) return false;\n    if (el.hidden) return false;\n    // if (!el.lpos) return false;\n    // if (el.position.width === 0 || el.position.height === 0) return false;\n  } while ((el = el.parent));\n  return true;\n});\n\nElement.prototype.__defineGetter__('_detached', function () {\n  var el = this;\n  do {\n    if (el.type === 'screen') return false;\n    if (!el.parent) return true;\n  } while ((el = el.parent));\n  return false;\n});\n\nElement.prototype.enableMouse = function () {\n  this.screen._listenMouse(this);\n};\n\nElement.prototype.enableKeys = function () {\n  this.screen._listenKeys(this);\n};\n\nElement.prototype.enableInput = function () {\n  this.screen._listenMouse(this);\n  this.screen._listenKeys(this);\n};\n\nElement.prototype.__defineGetter__('draggable', function () {\n  return this._draggable === true;\n});\n\nElement.prototype.__defineSetter__('draggable', function (draggable) {\n  return draggable ? this.enableDrag(draggable) : this.disableDrag();\n});\n\nElement.prototype.enableDrag = function (verify) {\n  var self = this;\n\n  if (this._draggable) return true;\n\n  if (typeof verify !== 'function') {\n    verify = function () {\n      return true;\n    };\n  }\n\n  this.enableMouse();\n\n  this.on(\n    'mousedown',\n    (this._dragMD = function (data) {\n      if (self.screen._dragging) return;\n      if (!verify(data)) return;\n      self.screen._dragging = self;\n      self._drag = {\n        x: data.x - self.aleft,\n        y: data.y - self.atop,\n      };\n      self.setFront();\n    })\n  );\n\n  this.onScreenEvent(\n    'mouse',\n    (this._dragM = function (data) {\n      if (self.screen._dragging !== self) return;\n\n      if (data.action !== 'mousedown' && data.action !== 'mousemove') {\n        delete self.screen._dragging;\n        delete self._drag;\n        return;\n      }\n\n      // This can happen in edge cases where the user is\n      // already dragging and element when it is detached.\n      if (!self.parent) return;\n\n      var ox = self._drag.x,\n        oy = self._drag.y,\n        px = self.parent.aleft,\n        py = self.parent.atop,\n        x = data.x - px - ox,\n        y = data.y - py - oy;\n\n      if (self.position.right != null) {\n        if (self.position.left != null) {\n          self.width = '100%-' + (self.parent.width - self.width);\n        }\n        self.position.right = null;\n      }\n\n      if (self.position.bottom != null) {\n        if (self.position.top != null) {\n          self.height = '100%-' + (self.parent.height - self.height);\n        }\n        self.position.bottom = null;\n      }\n\n      self.rleft = x;\n      self.rtop = y;\n\n      self.screen.render();\n    })\n  );\n\n  return (this._draggable = true);\n};\n\nElement.prototype.disableDrag = function () {\n  if (!this._draggable) return false;\n  delete this.screen._dragging;\n  delete this._drag;\n  this.removeListener('mousedown', this._dragMD);\n  this.removeScreenEvent('mouse', this._dragM);\n  return (this._draggable = false);\n};\n\nElement.prototype.key = function () {\n  return this.screen.program.key.apply(this, arguments);\n};\n\nElement.prototype.onceKey = function () {\n  return this.screen.program.onceKey.apply(this, arguments);\n};\n\nElement.prototype.unkey = Element.prototype.removeKey = function () {\n  return this.screen.program.unkey.apply(this, arguments);\n};\n\nElement.prototype.setIndex = function (index) {\n  if (!this.parent) return;\n\n  if (index < 0) {\n    index = this.parent.children.length + index;\n  }\n\n  index = Math.max(index, 0);\n  index = Math.min(index, this.parent.children.length - 1);\n\n  var i = this.parent.children.indexOf(this);\n  if (!~i) return;\n\n  var item = this.parent.children.splice(i, 1)[0];\n  this.parent.children.splice(index, 0, item);\n};\n\nElement.prototype.setFront = function () {\n  return this.setIndex(-1);\n};\n\nElement.prototype.setBack = function () {\n  return this.setIndex(0);\n};\n\nElement.prototype.clearPos = function (get, override) {\n  if (this.detached) return;\n  var lpos = this._getCoords(get);\n  if (!lpos) return;\n  this.screen.clearRegion(lpos.xi, lpos.xl, lpos.yi, lpos.yl, override);\n};\n\nElement.prototype.setLabel = function (options) {\n  var self = this;\n  if (!Box) {\n    // Use synchronous require fallback - this is a legacy pattern\n    // In ESM context, Box should be properly imported when needed\n    try {\n      const boxModule = require('./box.js');\n      Box = boxModule.default || boxModule;\n    } catch (e) {\n      // Fallback: use import if available or skip if in test environment\n      console.warn('Warning: Box module not available for label creation');\n      return this;\n    }\n  }\n\n  if (typeof options === 'string') {\n    options = { text: options };\n  }\n\n  if (this._label) {\n    this._label.setContent(options.text);\n    if (options.side !== 'right') {\n      this._label.rleft = 2 + (this.border ? -1 : 0);\n      this._label.position.right = undefined;\n      if (!this.screen.autoPadding) {\n        this._label.rleft = 2;\n      }\n    } else {\n      this._label.rright = 2 + (this.border ? -1 : 0);\n      this._label.position.left = undefined;\n      if (!this.screen.autoPadding) {\n        this._label.rright = 2;\n      }\n    }\n    return;\n  }\n\n  this._label = new Box({\n    screen: this.screen,\n    parent: this,\n    content: options.text,\n    top: -this.itop,\n    tags: this.parseTags,\n    shrink: true,\n    style: this.style.label,\n  });\n\n  if (options.side !== 'right') {\n    this._label.rleft = 2 - this.ileft;\n  } else {\n    this._label.rright = 2 - this.iright;\n  }\n\n  this._label._isLabel = true;\n\n  if (!this.screen.autoPadding) {\n    if (options.side !== 'right') {\n      this._label.rleft = 2;\n    } else {\n      this._label.rright = 2;\n    }\n    this._label.rtop = 0;\n  }\n\n  var reposition = function () {\n    self._label.rtop = (self.childBase || 0) - self.itop;\n    if (!self.screen.autoPadding) {\n      self._label.rtop = self.childBase || 0;\n    }\n    self.screen.render();\n  };\n\n  this.on(\n    'scroll',\n    (this._labelScroll = function () {\n      reposition();\n    })\n  );\n\n  this.on(\n    'resize',\n    (this._labelResize = function () {\n      nextTick(function () {\n        reposition();\n      });\n    })\n  );\n};\n\nElement.prototype.removeLabel = function () {\n  if (!this._label) return;\n  this.removeListener('scroll', this._labelScroll);\n  this.removeListener('resize', this._labelResize);\n  this._label.detach();\n  delete this._labelScroll;\n  delete this._labelResize;\n  delete this._label;\n};\n\nElement.prototype.setHover = function (options) {\n  if (typeof options === 'string') {\n    options = { text: options };\n  }\n\n  this._hoverOptions = options;\n  this.enableMouse();\n  this.screen._initHover();\n};\n\nElement.prototype.removeHover = function () {\n  delete this._hoverOptions;\n  if (!this.screen._hoverText || this.screen._hoverText.detached) return;\n  this.screen._hoverText.detach();\n  this.screen.render();\n};\n\n/**\n * Positioning\n */\n\n// The below methods are a bit confusing: basically\n// whenever Box.render is called `lpos` gets set on\n// the element, an object containing the rendered\n// coordinates. Since these don't update if the\n// element is moved somehow, they're unreliable in\n// that situation. However, if we can guarantee that\n// lpos is good and up to date, it can be more\n// accurate than the calculated positions below.\n// In this case, if the element is being rendered,\n// it's guaranteed that the parent will have been\n// rendered first, in which case we can use the\n// parant's lpos instead of recalculating it's\n// position (since that might be wrong because\n// it doesn't handle content shrinkage).\n\nElement.prototype._getPos = function () {\n  var pos = this.lpos;\n\n  assert.ok(pos);\n\n  if (pos.aleft != null) return pos;\n\n  pos.aleft = pos.xi;\n  pos.atop = pos.yi;\n  pos.aright = this.screen.cols - pos.xl;\n  pos.abottom = this.screen.rows - pos.yl;\n  pos.width = pos.xl - pos.xi;\n  pos.height = pos.yl - pos.yi;\n\n  return pos;\n};\n\n/**\n * Position Getters\n */\n\nElement.prototype._getWidth = function (get) {\n  var parent = get ? this.parent._getPos() : this.parent,\n    width = this.position.width,\n    left,\n    expr;\n\n  if (typeof width === 'string') {\n    if (width === 'half') width = '50%';\n    expr = width.split(/(?=\\+|-)/);\n    width = expr[0];\n    width = +width.slice(0, -1) / 100;\n    width = (parent.width * width) | 0;\n    width += +(expr[1] || 0);\n    return width;\n  }\n\n  // This is for if the element is being streched or shrunken.\n  // Although the width for shrunken elements is calculated\n  // in the render function, it may be calculated based on\n  // the content width, and the content width is initially\n  // decided by the width the element, so it needs to be\n  // calculated here.\n  if (width == null) {\n    left = this.position.left || 0;\n    if (typeof left === 'string') {\n      if (left === 'center') left = '50%';\n      expr = left.split(/(?=\\+|-)/);\n      left = expr[0];\n      left = +left.slice(0, -1) / 100;\n      left = (parent.width * left) | 0;\n      left += +(expr[1] || 0);\n    }\n    width = parent.width - (this.position.right || 0) - left;\n    if (this.screen.autoPadding) {\n      if (\n        (this.position.left != null || this.position.right == null) &&\n        this.position.left !== 'center'\n      ) {\n        width -= this.parent.ileft;\n      }\n      width -= this.parent.iright;\n    }\n  }\n\n  return width;\n};\n\nElement.prototype.__defineGetter__('width', function () {\n  return this._getWidth(false);\n});\n\nElement.prototype._getHeight = function (get) {\n  var parent = get ? this.parent._getPos() : this.parent,\n    height = this.position.height,\n    top,\n    expr;\n\n  if (typeof height === 'string') {\n    if (height === 'half') height = '50%';\n    expr = height.split(/(?=\\+|-)/);\n    height = expr[0];\n    height = +height.slice(0, -1) / 100;\n    height = (parent.height * height) | 0;\n    height += +(expr[1] || 0);\n    return height;\n  }\n\n  // This is for if the element is being streched or shrunken.\n  // Although the width for shrunken elements is calculated\n  // in the render function, it may be calculated based on\n  // the content width, and the content width is initially\n  // decided by the width the element, so it needs to be\n  // calculated here.\n  if (height == null) {\n    top = this.position.top || 0;\n    if (typeof top === 'string') {\n      if (top === 'center') top = '50%';\n      expr = top.split(/(?=\\+|-)/);\n      top = expr[0];\n      top = +top.slice(0, -1) / 100;\n      top = (parent.height * top) | 0;\n      top += +(expr[1] || 0);\n    }\n    height = parent.height - (this.position.bottom || 0) - top;\n    if (this.screen.autoPadding) {\n      if (\n        (this.position.top != null || this.position.bottom == null) &&\n        this.position.top !== 'center'\n      ) {\n        height -= this.parent.itop;\n      }\n      height -= this.parent.ibottom;\n    }\n  }\n\n  return height;\n};\n\nElement.prototype.__defineGetter__('height', function () {\n  return this._getHeight(false);\n});\n\nElement.prototype._getLeft = function (get) {\n  var parent = get ? this.parent._getPos() : this.parent,\n    left = this.position.left || 0,\n    expr;\n\n  if (typeof left === 'string') {\n    if (left === 'center') left = '50%';\n    expr = left.split(/(?=\\+|-)/);\n    left = expr[0];\n    left = +left.slice(0, -1) / 100;\n    left = (parent.width * left) | 0;\n    left += +(expr[1] || 0);\n    if (this.position.left === 'center') {\n      left -= (this._getWidth(get) / 2) | 0;\n    }\n  }\n\n  if (this.position.left == null && this.position.right != null) {\n    return this.screen.cols - this._getWidth(get) - this._getRight(get);\n  }\n\n  if (this.screen.autoPadding) {\n    if (\n      (this.position.left != null || this.position.right == null) &&\n      this.position.left !== 'center'\n    ) {\n      left += this.parent.ileft;\n    }\n  }\n\n  return (parent.aleft || 0) + left;\n};\n\nElement.prototype.__defineGetter__('aleft', function () {\n  return this._getLeft(false);\n});\n\nElement.prototype._getRight = function (get) {\n  var parent = get ? this.parent._getPos() : this.parent,\n    right;\n\n  if (this.position.right == null && this.position.left != null) {\n    right = this.screen.cols - (this._getLeft(get) + this._getWidth(get));\n    if (this.screen.autoPadding) {\n      right += this.parent.iright;\n    }\n    return right;\n  }\n\n  right = (parent.aright || 0) + (this.position.right || 0);\n\n  if (this.screen.autoPadding) {\n    right += this.parent.iright;\n  }\n\n  return right;\n};\n\nElement.prototype.__defineGetter__('aright', function () {\n  return this._getRight(false);\n});\n\nElement.prototype._getTop = function (get) {\n  var parent = get ? this.parent._getPos() : this.parent,\n    top = this.position.top || 0,\n    expr;\n\n  if (typeof top === 'string') {\n    if (top === 'center') top = '50%';\n    expr = top.split(/(?=\\+|-)/);\n    top = expr[0];\n    top = +top.slice(0, -1) / 100;\n    top = (parent.height * top) | 0;\n    top += +(expr[1] || 0);\n    if (this.position.top === 'center') {\n      top -= (this._getHeight(get) / 2) | 0;\n    }\n  }\n\n  if (this.position.top == null && this.position.bottom != null) {\n    return this.screen.rows - this._getHeight(get) - this._getBottom(get);\n  }\n\n  if (this.screen.autoPadding) {\n    if (\n      (this.position.top != null || this.position.bottom == null) &&\n      this.position.top !== 'center'\n    ) {\n      top += this.parent.itop;\n    }\n  }\n\n  return (parent.atop || 0) + top;\n};\n\nElement.prototype.__defineGetter__('atop', function () {\n  return this._getTop(false);\n});\n\nElement.prototype._getBottom = function (get) {\n  var parent = get ? this.parent._getPos() : this.parent,\n    bottom;\n\n  if (this.position.bottom == null && this.position.top != null) {\n    bottom = this.screen.rows - (this._getTop(get) + this._getHeight(get));\n    if (this.screen.autoPadding) {\n      bottom += this.parent.ibottom;\n    }\n    return bottom;\n  }\n\n  bottom = (parent.abottom || 0) + (this.position.bottom || 0);\n\n  if (this.screen.autoPadding) {\n    bottom += this.parent.ibottom;\n  }\n\n  return bottom;\n};\n\nElement.prototype.__defineGetter__('abottom', function () {\n  return this._getBottom(false);\n});\n\nElement.prototype.__defineGetter__('rleft', function () {\n  return this.aleft - this.parent.aleft;\n});\n\nElement.prototype.__defineGetter__('rright', function () {\n  return this.aright - this.parent.aright;\n});\n\nElement.prototype.__defineGetter__('rtop', function () {\n  return this.atop - this.parent.atop;\n});\n\nElement.prototype.__defineGetter__('rbottom', function () {\n  return this.abottom - this.parent.abottom;\n});\n\n/**\n * Position Setters\n */\n\n// NOTE:\n// For aright, abottom, right, and bottom:\n// If position.bottom is null, we could simply set top instead.\n// But it wouldn't replicate bottom behavior appropriately if\n// the parent was resized, etc.\nElement.prototype.__defineSetter__('width', function (val) {\n  if (this.position.width === val) return;\n  if (/^\\d+$/.test(val)) val = +val;\n  this.emit('resize');\n  this.clearPos();\n  return (this.position.width = val);\n});\n\nElement.prototype.__defineSetter__('height', function (val) {\n  if (this.position.height === val) return;\n  if (/^\\d+$/.test(val)) val = +val;\n  this.emit('resize');\n  this.clearPos();\n  return (this.position.height = val);\n});\n\nElement.prototype.__defineSetter__('aleft', function (val) {\n  var expr;\n  if (typeof val === 'string') {\n    if (val === 'center') {\n      val = (this.screen.width / 2) | 0;\n      val -= (this.width / 2) | 0;\n    } else {\n      expr = val.split(/(?=\\+|-)/);\n      val = expr[0];\n      val = +val.slice(0, -1) / 100;\n      val = (this.screen.width * val) | 0;\n      val += +(expr[1] || 0);\n    }\n  }\n  val -= this.parent.aleft;\n  if (this.position.left === val) return;\n  this.emit('move');\n  this.clearPos();\n  return (this.position.left = val);\n});\n\nElement.prototype.__defineSetter__('aright', function (val) {\n  val -= this.parent.aright;\n  if (this.position.right === val) return;\n  this.emit('move');\n  this.clearPos();\n  return (this.position.right = val);\n});\n\nElement.prototype.__defineSetter__('atop', function (val) {\n  var expr;\n  if (typeof val === 'string') {\n    if (val === 'center') {\n      val = (this.screen.height / 2) | 0;\n      val -= (this.height / 2) | 0;\n    } else {\n      expr = val.split(/(?=\\+|-)/);\n      val = expr[0];\n      val = +val.slice(0, -1) / 100;\n      val = (this.screen.height * val) | 0;\n      val += +(expr[1] || 0);\n    }\n  }\n  val -= this.parent.atop;\n  if (this.position.top === val) return;\n  this.emit('move');\n  this.clearPos();\n  return (this.position.top = val);\n});\n\nElement.prototype.__defineSetter__('abottom', function (val) {\n  val -= this.parent.abottom;\n  if (this.position.bottom === val) return;\n  this.emit('move');\n  this.clearPos();\n  return (this.position.bottom = val);\n});\n\nElement.prototype.__defineSetter__('rleft', function (val) {\n  if (this.position.left === val) return;\n  if (/^\\d+$/.test(val)) val = +val;\n  this.emit('move');\n  this.clearPos();\n  return (this.position.left = val);\n});\n\nElement.prototype.__defineSetter__('rright', function (val) {\n  if (this.position.right === val) return;\n  this.emit('move');\n  this.clearPos();\n  return (this.position.right = val);\n});\n\nElement.prototype.__defineSetter__('rtop', function (val) {\n  if (this.position.top === val) return;\n  if (/^\\d+$/.test(val)) val = +val;\n  this.emit('move');\n  this.clearPos();\n  return (this.position.top = val);\n});\n\nElement.prototype.__defineSetter__('rbottom', function (val) {\n  if (this.position.bottom === val) return;\n  this.emit('move');\n  this.clearPos();\n  return (this.position.bottom = val);\n});\n\nElement.prototype.__defineGetter__('ileft', function () {\n  return (this.border ? 1 : 0) + this.padding.left;\n  // return (this.border && this.border.left ? 1 : 0) + this.padding.left;\n});\n\nElement.prototype.__defineGetter__('itop', function () {\n  return (this.border ? 1 : 0) + this.padding.top;\n  // return (this.border && this.border.top ? 1 : 0) + this.padding.top;\n});\n\nElement.prototype.__defineGetter__('iright', function () {\n  return (this.border ? 1 : 0) + this.padding.right;\n  // return (this.border && this.border.right ? 1 : 0) + this.padding.right;\n});\n\nElement.prototype.__defineGetter__('ibottom', function () {\n  return (this.border ? 1 : 0) + this.padding.bottom;\n  // return (this.border && this.border.bottom ? 1 : 0) + this.padding.bottom;\n});\n\nElement.prototype.__defineGetter__('iwidth', function () {\n  // return (this.border\n  //   ? ((this.border.left ? 1 : 0) + (this.border.right ? 1 : 0)) : 0)\n  //   + this.padding.left + this.padding.right;\n  return (this.border ? 2 : 0) + this.padding.left + this.padding.right;\n});\n\nElement.prototype.__defineGetter__('iheight', function () {\n  // return (this.border\n  //   ? ((this.border.top ? 1 : 0) + (this.border.bottom ? 1 : 0)) : 0)\n  //   + this.padding.top + this.padding.bottom;\n  return (this.border ? 2 : 0) + this.padding.top + this.padding.bottom;\n});\n\nElement.prototype.__defineGetter__('tpadding', function () {\n  return (\n    this.padding.left +\n    this.padding.top +\n    this.padding.right +\n    this.padding.bottom\n  );\n});\n\n/**\n * Relative coordinates as default properties\n */\n\nElement.prototype.__defineGetter__('left', function () {\n  return this.rleft;\n});\n\nElement.prototype.__defineGetter__('right', function () {\n  return this.rright;\n});\n\nElement.prototype.__defineGetter__('top', function () {\n  return this.rtop;\n});\n\nElement.prototype.__defineGetter__('bottom', function () {\n  return this.rbottom;\n});\n\nElement.prototype.__defineSetter__('left', function (val) {\n  return (this.rleft = val);\n});\n\nElement.prototype.__defineSetter__('right', function (val) {\n  return (this.rright = val);\n});\n\nElement.prototype.__defineSetter__('top', function (val) {\n  return (this.rtop = val);\n});\n\nElement.prototype.__defineSetter__('bottom', function (val) {\n  return (this.rbottom = val);\n});\n\n/**\n * Rendering - here be dragons\n */\n\nElement.prototype._getShrinkBox = function (xi, xl, yi, yl, get) {\n  if (!this.children.length) {\n    return { xi: xi, xl: xi + 1, yi: yi, yl: yi + 1 };\n  }\n\n  var i,\n    el,\n    ret,\n    mxi = xi,\n    mxl = xi + 1,\n    myi = yi,\n    myl = yi + 1;\n\n  // This is a chicken and egg problem. We need to determine how the children\n  // will render in order to determine how this element renders, but it in\n  // order to figure out how the children will render, they need to know\n  // exactly how their parent renders, so, we can give them what we have so\n  // far.\n  var _lpos;\n  if (get) {\n    _lpos = this.lpos;\n    this.lpos = { xi: xi, xl: xl, yi: yi, yl: yl };\n    //this.shrink = false;\n  }\n\n  for (i = 0; i < this.children.length; i++) {\n    el = this.children[i];\n\n    ret = el._getCoords(get);\n\n    // Or just (seemed to work, but probably not good):\n    // ret = el.lpos || this.lpos;\n\n    if (!ret) continue;\n\n    // Since the parent element is shrunk, and the child elements think it's\n    // going to take up as much space as possible, an element anchored to the\n    // right or bottom will inadvertantly make the parent's shrunken size as\n    // large as possible. So, we can just use the height and/or width the of\n    // element.\n    // if (get) {\n    if (el.position.left == null && el.position.right != null) {\n      ret.xl = xi + (ret.xl - ret.xi);\n      ret.xi = xi;\n      if (this.screen.autoPadding) {\n        // Maybe just do this no matter what.\n        ret.xl += this.ileft;\n        ret.xi += this.ileft;\n      }\n    }\n    if (el.position.top == null && el.position.bottom != null) {\n      ret.yl = yi + (ret.yl - ret.yi);\n      ret.yi = yi;\n      if (this.screen.autoPadding) {\n        // Maybe just do this no matter what.\n        ret.yl += this.itop;\n        ret.yi += this.itop;\n      }\n    }\n\n    if (ret.xi < mxi) mxi = ret.xi;\n    if (ret.xl > mxl) mxl = ret.xl;\n    if (ret.yi < myi) myi = ret.yi;\n    if (ret.yl > myl) myl = ret.yl;\n  }\n\n  if (get) {\n    this.lpos = _lpos;\n    //this.shrink = true;\n  }\n\n  if (\n    this.position.width == null &&\n    (this.position.left == null || this.position.right == null)\n  ) {\n    if (this.position.left == null && this.position.right != null) {\n      xi = xl - (mxl - mxi);\n      if (!this.screen.autoPadding) {\n        xi -= this.padding.left + this.padding.right;\n      } else {\n        xi -= this.ileft;\n      }\n    } else {\n      xl = mxl;\n      if (!this.screen.autoPadding) {\n        xl += this.padding.left + this.padding.right;\n        // XXX Temporary workaround until we decide to make autoPadding default.\n        // See widget-listtable.js for an example of why this is necessary.\n        // XXX Maybe just to this for all this being that this would affect\n        // width shrunken normal shrunken lists as well.\n        // if (this._isList) {\n        if (this.type === 'list-table') {\n          xl -= this.padding.left + this.padding.right;\n          xl += this.iright;\n        }\n      } else {\n        //xl += this.padding.right;\n        xl += this.iright;\n      }\n    }\n  }\n\n  if (\n    this.position.height == null &&\n    (this.position.top == null || this.position.bottom == null) &&\n    (!this.scrollable || this._isList)\n  ) {\n    // NOTE: Lists get special treatment if they are shrunken - assume they\n    // want all list items showing. This is one case we can calculate the\n    // height based on items/boxes.\n    if (this._isList) {\n      myi = 0 - this.itop;\n      myl = this.items.length + this.ibottom;\n    }\n    if (this.position.top == null && this.position.bottom != null) {\n      yi = yl - (myl - myi);\n      if (!this.screen.autoPadding) {\n        yi -= this.padding.top + this.padding.bottom;\n      } else {\n        yi -= this.itop;\n      }\n    } else {\n      yl = myl;\n      if (!this.screen.autoPadding) {\n        yl += this.padding.top + this.padding.bottom;\n      } else {\n        yl += this.ibottom;\n      }\n    }\n  }\n\n  return { xi: xi, xl: xl, yi: yi, yl: yl };\n};\n\nElement.prototype._getShrinkContent = function (xi, xl, yi, yl) {\n  var h = this._clines.length,\n    w = this._clines.mwidth || 1;\n\n  if (\n    this.position.width == null &&\n    (this.position.left == null || this.position.right == null)\n  ) {\n    if (this.position.left == null && this.position.right != null) {\n      xi = xl - w - this.iwidth;\n    } else {\n      xl = xi + w + this.iwidth;\n    }\n  }\n\n  if (\n    this.position.height == null &&\n    (this.position.top == null || this.position.bottom == null) &&\n    (!this.scrollable || this._isList)\n  ) {\n    if (this.position.top == null && this.position.bottom != null) {\n      yi = yl - h - this.iheight;\n    } else {\n      yl = yi + h + this.iheight;\n    }\n  }\n\n  return { xi: xi, xl: xl, yi: yi, yl: yl };\n};\n\nElement.prototype._getShrink = function (xi, xl, yi, yl, get) {\n  var shrinkBox = this._getShrinkBox(xi, xl, yi, yl, get),\n    shrinkContent = this._getShrinkContent(xi, xl, yi, yl, get),\n    xll = xl,\n    yll = yl;\n\n  // Figure out which one is bigger and use it.\n  if (shrinkBox.xl - shrinkBox.xi > shrinkContent.xl - shrinkContent.xi) {\n    xi = shrinkBox.xi;\n    xl = shrinkBox.xl;\n  } else {\n    xi = shrinkContent.xi;\n    xl = shrinkContent.xl;\n  }\n\n  if (shrinkBox.yl - shrinkBox.yi > shrinkContent.yl - shrinkContent.yi) {\n    yi = shrinkBox.yi;\n    yl = shrinkBox.yl;\n  } else {\n    yi = shrinkContent.yi;\n    yl = shrinkContent.yl;\n  }\n\n  // Recenter shrunken elements.\n  if (xl < xll && this.position.left === 'center') {\n    xll = ((xll - xl) / 2) | 0;\n    xi += xll;\n    xl += xll;\n  }\n\n  if (yl < yll && this.position.top === 'center') {\n    yll = ((yll - yl) / 2) | 0;\n    yi += yll;\n    yl += yll;\n  }\n\n  return { xi: xi, xl: xl, yi: yi, yl: yl };\n};\n\nElement.prototype._getCoords = function (get, noscroll) {\n  if (this.hidden) return;\n\n  // if (this.parent._rendering) {\n  //   get = true;\n  // }\n\n  var xi = this._getLeft(get),\n    xl = xi + this._getWidth(get),\n    yi = this._getTop(get),\n    yl = yi + this._getHeight(get),\n    base = this.childBase || 0,\n    el = this,\n    fixed = this.fixed,\n    coords,\n    v,\n    noleft,\n    noright,\n    notop,\n    nobot,\n    ppos,\n    b;\n\n  // Attempt to shrink the element base on the\n  // size of the content and child elements.\n  if (this.shrink) {\n    coords = this._getShrink(xi, xl, yi, yl, get);\n    (xi = coords.xi), (xl = coords.xl);\n    (yi = coords.yi), (yl = coords.yl);\n  }\n\n  // Find a scrollable ancestor if we have one.\n  while ((el = el.parent)) {\n    if (el.scrollable) {\n      if (fixed) {\n        fixed = false;\n        continue;\n      }\n      break;\n    }\n  }\n\n  // Check to make sure we're visible and\n  // inside of the visible scroll area.\n  // NOTE: Lists have a property where only\n  // the list items are obfuscated.\n\n  // Old way of doing things, this would not render right if a shrunken element\n  // with lots of boxes in it was within a scrollable element.\n  // See: $ node test/widget-shrink-fail.js\n  // var thisparent = this.parent;\n\n  var thisparent = el;\n  if (el && !noscroll) {\n    ppos = thisparent.lpos;\n\n    // The shrink option can cause a stack overflow\n    // by calling _getCoords on the child again.\n    // if (!get && !thisparent.shrink) {\n    //   ppos = thisparent._getCoords();\n    // }\n\n    if (!ppos) return;\n\n    // TODO: Figure out how to fix base (and cbase to only\n    // take into account the *parent's* padding.\n\n    yi -= ppos.base;\n    yl -= ppos.base;\n\n    b = thisparent.border ? 1 : 0;\n\n    // XXX\n    // Fixes non-`fixed` labels to work with scrolling (they're ON the border):\n    // if (this.position.left < 0\n    //     || this.position.right < 0\n    //     || this.position.top < 0\n    //     || this.position.bottom < 0) {\n    if (this._isLabel) {\n      b = 0;\n    }\n\n    if (yi < ppos.yi + b) {\n      if (yl - 1 < ppos.yi + b) {\n        // Is above.\n        return;\n      } else {\n        // Is partially covered above.\n        notop = true;\n        v = ppos.yi - yi;\n        if (this.border) v--;\n        if (thisparent.border) v++;\n        base += v;\n        yi += v;\n      }\n    } else if (yl > ppos.yl - b) {\n      if (yi > ppos.yl - 1 - b) {\n        // Is below.\n        return;\n      } else {\n        // Is partially covered below.\n        nobot = true;\n        v = yl - ppos.yl;\n        if (this.border) v--;\n        if (thisparent.border) v++;\n        yl -= v;\n      }\n    }\n\n    // Shouldn't be necessary.\n    // assert.ok(yi < yl);\n    if (yi >= yl) return;\n\n    // Could allow overlapping stuff in scrolling elements\n    // if we cleared the pending buffer before every draw.\n    if (xi < el.lpos.xi) {\n      xi = el.lpos.xi;\n      noleft = true;\n      if (this.border) xi--;\n      if (thisparent.border) xi++;\n    }\n    if (xl > el.lpos.xl) {\n      xl = el.lpos.xl;\n      noright = true;\n      if (this.border) xl++;\n      if (thisparent.border) xl--;\n    }\n    //if (xi > xl) return;\n    if (xi >= xl) return;\n  }\n\n  if (this.noOverflow && this.parent.lpos) {\n    if (xi < this.parent.lpos.xi + this.parent.ileft) {\n      xi = this.parent.lpos.xi + this.parent.ileft;\n    }\n    if (xl > this.parent.lpos.xl - this.parent.iright) {\n      xl = this.parent.lpos.xl - this.parent.iright;\n    }\n    if (yi < this.parent.lpos.yi + this.parent.itop) {\n      yi = this.parent.lpos.yi + this.parent.itop;\n    }\n    if (yl > this.parent.lpos.yl - this.parent.ibottom) {\n      yl = this.parent.lpos.yl - this.parent.ibottom;\n    }\n  }\n\n  // if (this.parent.lpos) {\n  //   this.parent.lpos._scrollBottom = Math.max(\n  //     this.parent.lpos._scrollBottom, yl);\n  // }\n\n  return {\n    xi: xi,\n    xl: xl,\n    yi: yi,\n    yl: yl,\n    base: base,\n    noleft: noleft,\n    noright: noright,\n    notop: notop,\n    nobot: nobot,\n    renders: this.screen.renders,\n  };\n};\n\nElement.prototype.render = function () {\n  this._emit('prerender');\n\n  this.parseContent();\n\n  var coords = this._getCoords(true);\n  if (!coords) {\n    delete this.lpos;\n    return;\n  }\n\n  if (coords.xl - coords.xi <= 0) {\n    coords.xl = Math.max(coords.xl, coords.xi);\n    return;\n  }\n\n  if (coords.yl - coords.yi <= 0) {\n    coords.yl = Math.max(coords.yl, coords.yi);\n    return;\n  }\n\n  var lines = this.screen.lines,\n    xi = coords.xi,\n    xl = coords.xl,\n    yi = coords.yi,\n    yl = coords.yl,\n    x,\n    y,\n    cell,\n    attr,\n    ch,\n    content = this._pcontent,\n    ci = this._clines.ci[coords.base],\n    battr,\n    dattr,\n    c,\n    visible,\n    i,\n    bch = this.ch;\n\n  // Clip content if it's off the edge of the screen\n  // if (xi + this.ileft < 0 || yi + this.itop < 0) {\n  //   var clines = this._clines.slice();\n  //   if (xi + this.ileft < 0) {\n  //     for (var i = 0; i < clines.length; i++) {\n  //       var t = 0;\n  //       var csi = '';\n  //       var csis = '';\n  //       for (var j = 0; j < clines[i].length; j++) {\n  //         while (clines[i][j] === '\\x1b') {\n  //           csi = '\\x1b';\n  //           while (clines[i][j++] !== 'm') csi += clines[i][j];\n  //           csis += csi;\n  //         }\n  //         if (++t === -(xi + this.ileft) + 1) break;\n  //       }\n  //       clines[i] = csis + clines[i].substring(j);\n  //     }\n  //   }\n  //   if (yi + this.itop < 0) {\n  //     clines = clines.slice(-(yi + this.itop));\n  //   }\n  //   content = clines.join('\\n');\n  // }\n\n  if (coords.base >= this._clines.ci.length) {\n    ci = this._pcontent.length;\n  }\n\n  this.lpos = coords;\n\n  if (this.border && this.border.type === 'line') {\n    this.screen._borderStops[coords.yi] = true;\n    this.screen._borderStops[coords.yl - 1] = true;\n    // if (!this.screen._borderStops[coords.yi]) {\n    //   this.screen._borderStops[coords.yi] = { xi: coords.xi, xl: coords.xl };\n    // } else {\n    //   if (this.screen._borderStops[coords.yi].xi > coords.xi) {\n    //     this.screen._borderStops[coords.yi].xi = coords.xi;\n    //   }\n    //   if (this.screen._borderStops[coords.yi].xl < coords.xl) {\n    //     this.screen._borderStops[coords.yi].xl = coords.xl;\n    //   }\n    // }\n    // this.screen._borderStops[coords.yl - 1] = this.screen._borderStops[coords.yi];\n  }\n\n  dattr = this.sattr(this.style);\n  attr = dattr;\n\n  // If we're in a scrollable text box, check to\n  // see which attributes this line starts with.\n  if (ci > 0) {\n    attr = this._clines.attr[Math.min(coords.base, this._clines.length - 1)];\n  }\n\n  if (this.border) xi++, xl--, yi++, yl--;\n\n  // If we have padding/valign, that means the\n  // content-drawing loop will skip a few cells/lines.\n  // To deal with this, we can just fill the whole thing\n  // ahead of time. This could be optimized.\n  if (this.tpadding || (this.valign && this.valign !== 'top')) {\n    if (this.style.transparent) {\n      for (y = Math.max(yi, 0); y < yl; y++) {\n        if (!lines[y]) break;\n        for (x = Math.max(xi, 0); x < xl; x++) {\n          if (!lines[y][x]) break;\n          lines[y][x][0] = colors.blend(attr, lines[y][x][0]);\n          // lines[y][x][1] = bch;\n          lines[y].dirty = true;\n        }\n      }\n    } else {\n      this.screen.fillRegion(dattr, bch, xi, xl, yi, yl);\n    }\n  }\n\n  if (this.tpadding) {\n    (xi += this.padding.left), (xl -= this.padding.right);\n    (yi += this.padding.top), (yl -= this.padding.bottom);\n  }\n\n  // Determine where to place the text if it's vertically aligned.\n  if (this.valign === 'middle' || this.valign === 'bottom') {\n    visible = yl - yi;\n    if (this._clines.length < visible) {\n      if (this.valign === 'middle') {\n        visible = (visible / 2) | 0;\n        visible -= (this._clines.length / 2) | 0;\n      } else if (this.valign === 'bottom') {\n        visible -= this._clines.length;\n      }\n      ci -= visible * (xl - xi);\n    }\n  }\n\n  // Draw the content and background.\n  for (y = yi; y < yl; y++) {\n    if (!lines[y]) {\n      if (y >= this.screen.height || yl < this.ibottom) {\n        break;\n      } else {\n        continue;\n      }\n    }\n    for (x = xi; x < xl; x++) {\n      cell = lines[y][x];\n      if (!cell) {\n        if (x >= this.screen.width || xl < this.iright) {\n          break;\n        } else {\n          continue;\n        }\n      }\n\n      ch = content[ci++] || bch;\n\n      // if (!content[ci] && !coords._contentEnd) {\n      //   coords._contentEnd = { x: x - xi, y: y - yi };\n      // }\n\n      // Handle escape codes.\n      while (ch === '\\x1b') {\n        if ((c = /^\\x1b\\[[\\d;]*m/.exec(content.substring(ci - 1)))) {\n          ci += c[0].length - 1;\n          attr = this.screen.attrCode(c[0], attr, dattr);\n          // Ignore foreground changes for selected items.\n          if (\n            this.parent._isList &&\n            this.parent.interactive &&\n            this.parent.items[this.parent.selected] === this &&\n            this.parent.options.invertSelected !== false\n          ) {\n            // Copy foreground color from dattr in new format\n            var dFg = Math.floor(dattr / 0x1000000) & 0xffffff;\n            attr =\n              (attr & 0xffffff) +\n              dFg * 0x1000000 +\n              Math.floor(attr / 0x1000000000000) * 0x1000000000000;\n          }\n          ch = content[ci] || bch;\n          ci++;\n        } else {\n          break;\n        }\n      }\n\n      // Handle newlines.\n      if (ch === '\\t') ch = bch;\n      if (ch === '\\n') {\n        // If we're on the first cell and we find a newline and the last cell\n        // of the last line was not a newline, let's just treat this like the\n        // newline was already \"counted\".\n        if (x === xi && y !== yi && content[ci - 2] !== '\\n') {\n          x--;\n          continue;\n        }\n        // We could use fillRegion here, name the\n        // outer loop, and continue to it instead.\n        ch = bch;\n        for (; x < xl; x++) {\n          cell = lines[y][x];\n          if (!cell) break;\n          if (this.style.transparent) {\n            lines[y][x][0] = colors.blend(attr, lines[y][x][0]);\n            if (content[ci]) lines[y][x][1] = ch;\n            lines[y].dirty = true;\n          } else {\n            if (attr !== cell[0] || ch !== cell[1]) {\n              lines[y][x][0] = attr;\n              lines[y][x][1] = ch;\n              lines[y].dirty = true;\n            }\n          }\n        }\n        continue;\n      }\n\n      if (this.screen.fullUnicode && content[ci - 1]) {\n        var point = unicode.codePointAt(content, ci - 1);\n        // Handle combining chars:\n        // Make sure they get in the same cell and are counted as 0.\n        if (unicode.combining[point]) {\n          if (point > 0x00ffff) {\n            ch = content[ci - 1] + content[ci];\n            ci++;\n          }\n          if (x - 1 >= xi) {\n            lines[y][x - 1][1] += ch;\n          } else if (y - 1 >= yi) {\n            lines[y - 1][xl - 1][1] += ch;\n          }\n          x--;\n          continue;\n        }\n        // Handle surrogate pairs:\n        // Make sure we put surrogate pair chars in one cell.\n        if (point > 0x00ffff) {\n          ch = content[ci - 1] + content[ci];\n          ci++;\n        }\n      }\n\n      if (this._noFill) continue;\n\n      if (this.style.transparent) {\n        lines[y][x][0] = colors.blend(attr, lines[y][x][0]);\n        if (content[ci]) lines[y][x][1] = ch;\n        lines[y].dirty = true;\n      } else {\n        if (attr !== cell[0] || ch !== cell[1]) {\n          lines[y][x][0] = attr;\n          lines[y][x][1] = ch;\n          lines[y].dirty = true;\n        }\n      }\n    }\n  }\n\n  // Draw the scrollbar.\n  // Could possibly draw this after all child elements.\n  if (this.scrollbar) {\n    // XXX\n    // i = this.getScrollHeight();\n    i = Math.max(this._clines.length, this._scrollBottom());\n  }\n  if (coords.notop || coords.nobot) i = -Infinity;\n  if (this.scrollbar && yl - yi < i) {\n    x = xl - 1;\n    if (this.scrollbar.ignoreBorder && this.border) x++;\n    if (this.alwaysScroll) {\n      y = this.childBase / (i - (yl - yi));\n    } else {\n      y = (this.childBase + this.childOffset) / (i - 1);\n    }\n    y = yi + (((yl - yi) * y) | 0);\n    if (y >= yl) y = yl - 1;\n    cell = lines[y] && lines[y][x];\n    if (cell) {\n      if (this.track) {\n        ch = this.track.ch || ' ';\n        attr = this.sattr(\n          this.style.track,\n          this.style.track.fg || this.style.fg,\n          this.style.track.bg || this.style.bg\n        );\n        this.screen.fillRegion(attr, ch, x, x + 1, yi, yl);\n      }\n      ch = this.scrollbar.ch || ' ';\n      attr = this.sattr(\n        this.style.scrollbar,\n        this.style.scrollbar.fg || this.style.fg,\n        this.style.scrollbar.bg || this.style.bg\n      );\n      if (attr !== cell[0] || ch !== cell[1]) {\n        lines[y][x][0] = attr;\n        lines[y][x][1] = ch;\n        lines[y].dirty = true;\n      }\n    }\n  }\n\n  if (this.border) xi--, xl++, yi--, yl++;\n\n  if (this.tpadding) {\n    (xi -= this.padding.left), (xl += this.padding.right);\n    (yi -= this.padding.top), (yl += this.padding.bottom);\n  }\n\n  // Draw the border.\n  if (this.border) {\n    battr = this.sattr(this.style.border);\n    y = yi;\n    if (coords.notop) y = -1;\n    for (x = xi; x < xl; x++) {\n      if (!lines[y]) break;\n      if (coords.noleft && x === xi) continue;\n      if (coords.noright && x === xl - 1) continue;\n      cell = lines[y][x];\n      if (!cell) continue;\n      if (this.border.type === 'line') {\n        if (x === xi) {\n          ch = '\\u250c'; // '┌'\n          if (!this.border.left) {\n            if (this.border.top) {\n              ch = '\\u2500'; // '─'\n            } else {\n              continue;\n            }\n          } else {\n            if (!this.border.top) {\n              ch = '\\u2502'; // '│'\n            }\n          }\n        } else if (x === xl - 1) {\n          ch = '\\u2510'; // '┐'\n          if (!this.border.right) {\n            if (this.border.top) {\n              ch = '\\u2500'; // '─'\n            } else {\n              continue;\n            }\n          } else {\n            if (!this.border.top) {\n              ch = '\\u2502'; // '│'\n            }\n          }\n        } else {\n          ch = '\\u2500'; // '─'\n        }\n      } else if (this.border.type === 'bg') {\n        ch = this.border.ch;\n      }\n      if (!this.border.top && x !== xi && x !== xl - 1) {\n        ch = ' ';\n        if (dattr !== cell[0] || ch !== cell[1]) {\n          lines[y][x][0] = dattr;\n          lines[y][x][1] = ch;\n          lines[y].dirty = true;\n          continue;\n        }\n      }\n      if (battr !== cell[0] || ch !== cell[1]) {\n        lines[y][x][0] = battr;\n        lines[y][x][1] = ch;\n        lines[y].dirty = true;\n      }\n    }\n    y = yi + 1;\n    for (; y < yl - 1; y++) {\n      if (!lines[y]) continue;\n      cell = lines[y][xi];\n      if (cell) {\n        if (this.border.left) {\n          if (this.border.type === 'line') {\n            ch = '\\u2502'; // '│'\n          } else if (this.border.type === 'bg') {\n            ch = this.border.ch;\n          }\n          if (!coords.noleft)\n            if (battr !== cell[0] || ch !== cell[1]) {\n              lines[y][xi][0] = battr;\n              lines[y][xi][1] = ch;\n              lines[y].dirty = true;\n            }\n        } else {\n          ch = ' ';\n          if (dattr !== cell[0] || ch !== cell[1]) {\n            lines[y][xi][0] = dattr;\n            lines[y][xi][1] = ch;\n            lines[y].dirty = true;\n          }\n        }\n      }\n      cell = lines[y][xl - 1];\n      if (cell) {\n        if (this.border.right) {\n          if (this.border.type === 'line') {\n            ch = '\\u2502'; // '│'\n          } else if (this.border.type === 'bg') {\n            ch = this.border.ch;\n          }\n          if (!coords.noright)\n            if (battr !== cell[0] || ch !== cell[1]) {\n              lines[y][xl - 1][0] = battr;\n              lines[y][xl - 1][1] = ch;\n              lines[y].dirty = true;\n            }\n        } else {\n          ch = ' ';\n          if (dattr !== cell[0] || ch !== cell[1]) {\n            lines[y][xl - 1][0] = dattr;\n            lines[y][xl - 1][1] = ch;\n            lines[y].dirty = true;\n          }\n        }\n      }\n    }\n    y = yl - 1;\n    if (coords.nobot) y = -1;\n    for (x = xi; x < xl; x++) {\n      if (!lines[y]) break;\n      if (coords.noleft && x === xi) continue;\n      if (coords.noright && x === xl - 1) continue;\n      cell = lines[y][x];\n      if (!cell) continue;\n      if (this.border.type === 'line') {\n        if (x === xi) {\n          ch = '\\u2514'; // '└'\n          if (!this.border.left) {\n            if (this.border.bottom) {\n              ch = '\\u2500'; // '─'\n            } else {\n              continue;\n            }\n          } else {\n            if (!this.border.bottom) {\n              ch = '\\u2502'; // '│'\n            }\n          }\n        } else if (x === xl - 1) {\n          ch = '\\u2518'; // '┘'\n          if (!this.border.right) {\n            if (this.border.bottom) {\n              ch = '\\u2500'; // '─'\n            } else {\n              continue;\n            }\n          } else {\n            if (!this.border.bottom) {\n              ch = '\\u2502'; // '│'\n            }\n          }\n        } else {\n          ch = '\\u2500'; // '─'\n        }\n      } else if (this.border.type === 'bg') {\n        ch = this.border.ch;\n      }\n      if (!this.border.bottom && x !== xi && x !== xl - 1) {\n        ch = ' ';\n        if (dattr !== cell[0] || ch !== cell[1]) {\n          lines[y][x][0] = dattr;\n          lines[y][x][1] = ch;\n          lines[y].dirty = true;\n        }\n        continue;\n      }\n      if (battr !== cell[0] || ch !== cell[1]) {\n        lines[y][x][0] = battr;\n        lines[y][x][1] = ch;\n        lines[y].dirty = true;\n      }\n    }\n  }\n\n  if (this.shadow) {\n    // right\n    y = Math.max(yi + 1, 0);\n    for (; y < yl + 1; y++) {\n      if (!lines[y]) break;\n      x = xl;\n      for (; x < xl + 2; x++) {\n        if (!lines[y][x]) break;\n        // lines[y][x][0] = colors.blend(this.dattr, lines[y][x][0]);\n        lines[y][x][0] = colors.blend(lines[y][x][0]);\n        lines[y].dirty = true;\n      }\n    }\n    // bottom\n    y = yl;\n    for (; y < yl + 1; y++) {\n      if (!lines[y]) break;\n      for (x = Math.max(xi + 1, 0); x < xl; x++) {\n        if (!lines[y][x]) break;\n        // lines[y][x][0] = colors.blend(this.dattr, lines[y][x][0]);\n        lines[y][x][0] = colors.blend(lines[y][x][0]);\n        lines[y].dirty = true;\n      }\n    }\n  }\n\n  this.children.forEach(function (el) {\n    if (el.screen._ci !== -1) {\n      el.index = el.screen._ci++;\n    }\n    // if (el.screen._rendering) {\n    //   el._rendering = true;\n    // }\n    el.render();\n    // if (el.screen._rendering) {\n    //   el._rendering = false;\n    // }\n  });\n\n  this._emit('render', [coords]);\n\n  return coords;\n};\n\nElement.prototype._render = Element.prototype.render;\n\n/**\n * Content Methods\n */\n\nElement.prototype.insertLine = function (i, line) {\n  if (typeof line === 'string') line = line.split('\\n');\n\n  if (i !== i || i == null) {\n    i = this._clines.ftor.length;\n  }\n\n  i = Math.max(i, 0);\n\n  while (this._clines.fake.length < i) {\n    this._clines.fake.push('');\n    this._clines.ftor.push([this._clines.push('') - 1]);\n    this._clines.rtof(this._clines.fake.length - 1);\n  }\n\n  // NOTE: Could possibly compare the first and last ftor line numbers to see\n  // if they're the same, or if they fit in the visible region entirely.\n  var start = this._clines.length,\n    diff,\n    real;\n\n  if (i >= this._clines.ftor.length) {\n    real = this._clines.ftor[this._clines.ftor.length - 1];\n    real = real[real.length - 1] + 1;\n  } else {\n    real = this._clines.ftor[i][0];\n  }\n\n  for (var j = 0; j < line.length; j++) {\n    this._clines.fake.splice(i + j, 0, line[j]);\n  }\n\n  this.setContent(this._clines.fake.join('\\n'), true);\n\n  diff = this._clines.length - start;\n\n  if (diff > 0) {\n    var pos = this._getCoords();\n    if (!pos) return;\n\n    var height = pos.yl - pos.yi - this.iheight,\n      base = this.childBase || 0,\n      visible = real >= base && real - base < height;\n\n    if (pos && visible && this.screen.cleanSides(this)) {\n      this.screen.insertLine(\n        diff,\n        pos.yi + this.itop + real - base,\n        pos.yi,\n        pos.yl - this.ibottom - 1\n      );\n    }\n  }\n};\n\nElement.prototype.deleteLine = function (i, n) {\n  n = n || 1;\n\n  if (i !== i || i == null) {\n    i = this._clines.ftor.length - 1;\n  }\n\n  i = Math.max(i, 0);\n  i = Math.min(i, this._clines.ftor.length - 1);\n\n  // NOTE: Could possibly compare the first and last ftor line numbers to see\n  // if they're the same, or if they fit in the visible region entirely.\n  var start = this._clines.length,\n    diff,\n    real = this._clines.ftor[i][0];\n\n  while (n--) {\n    this._clines.fake.splice(i, 1);\n  }\n\n  this.setContent(this._clines.fake.join('\\n'), true);\n\n  diff = start - this._clines.length;\n\n  // XXX clearPos() without diff statement?\n  var height = 0;\n\n  if (diff > 0) {\n    var pos = this._getCoords();\n    if (!pos) return;\n\n    height = pos.yl - pos.yi - this.iheight;\n\n    var base = this.childBase || 0,\n      visible = real >= base && real - base < height;\n\n    if (pos && visible && this.screen.cleanSides(this)) {\n      this.screen.deleteLine(\n        diff,\n        pos.yi + this.itop + real - base,\n        pos.yi,\n        pos.yl - this.ibottom - 1\n      );\n    }\n  }\n\n  if (this._clines.length < height) {\n    this.clearPos();\n  }\n};\n\nElement.prototype.insertTop = function (line) {\n  var fake = this._clines.rtof[this.childBase || 0];\n  return this.insertLine(fake, line);\n};\n\nElement.prototype.insertBottom = function (line) {\n  var h = (this.childBase || 0) + this.height - this.iheight,\n    i = Math.min(h, this._clines.length),\n    fake = this._clines.rtof[i - 1] + 1;\n\n  return this.insertLine(fake, line);\n};\n\nElement.prototype.deleteTop = function (n) {\n  var fake = this._clines.rtof[this.childBase || 0];\n  return this.deleteLine(fake, n);\n};\n\nElement.prototype.deleteBottom = function (n) {\n  var h = (this.childBase || 0) + this.height - 1 - this.iheight,\n    i = Math.min(h, this._clines.length - 1),\n    fake = this._clines.rtof[i];\n\n  n = n || 1;\n\n  return this.deleteLine(fake - (n - 1), n);\n};\n\nElement.prototype.setLine = function (i, line) {\n  i = Math.max(i, 0);\n  while (this._clines.fake.length < i) {\n    this._clines.fake.push('');\n  }\n  this._clines.fake[i] = line;\n  return this.setContent(this._clines.fake.join('\\n'), true);\n};\n\nElement.prototype.setBaseLine = function (i, line) {\n  var fake = this._clines.rtof[this.childBase || 0];\n  return this.setLine(fake + i, line);\n};\n\nElement.prototype.getLine = function (i) {\n  i = Math.max(i, 0);\n  i = Math.min(i, this._clines.fake.length - 1);\n  return this._clines.fake[i];\n};\n\nElement.prototype.getBaseLine = function (i) {\n  var fake = this._clines.rtof[this.childBase || 0];\n  return this.getLine(fake + i);\n};\n\nElement.prototype.clearLine = function (i) {\n  i = Math.min(i, this._clines.fake.length - 1);\n  return this.setLine(i, '');\n};\n\nElement.prototype.clearBaseLine = function (i) {\n  var fake = this._clines.rtof[this.childBase || 0];\n  return this.clearLine(fake + i);\n};\n\nElement.prototype.unshiftLine = function (line) {\n  return this.insertLine(0, line);\n};\n\nElement.prototype.shiftLine = function (n) {\n  return this.deleteLine(0, n);\n};\n\nElement.prototype.pushLine = function (line) {\n  if (!this.content) return this.setLine(0, line);\n  return this.insertLine(this._clines.fake.length, line);\n};\n\nElement.prototype.popLine = function (n) {\n  return this.deleteLine(this._clines.fake.length - 1, n);\n};\n\nElement.prototype.getLines = function () {\n  return this._clines.fake.slice();\n};\n\nElement.prototype.getScreenLines = function () {\n  return this._clines.slice();\n};\n\nElement.prototype.strWidth = function (text) {\n  text = this.parseTags ? helpers.stripTags(text) : text;\n  return this.screen.fullUnicode\n    ? unicode.strWidth(text)\n    : helpers.dropUnicode(text).length;\n};\n\nElement.prototype.screenshot = function (xi, xl, yi, yl) {\n  xi = this.lpos.xi + this.ileft + (xi || 0);\n  if (xl != null) {\n    xl = this.lpos.xi + this.ileft + (xl || 0);\n  } else {\n    xl = this.lpos.xl - this.iright;\n  }\n  yi = this.lpos.yi + this.itop + (yi || 0);\n  if (yl != null) {\n    yl = this.lpos.yi + this.itop + (yl || 0);\n  } else {\n    yl = this.lpos.yl - this.ibottom;\n  }\n  return this.screen.screenshot(xi, xl, yi, yl);\n};\n\n/**\n * Position setters\n */\n\nElement.prototype.setPosition = function (top, left) {\n  if (typeof top === 'object') {\n    left = top.left;\n    top = top.top;\n  }\n\n  if (top != null) {\n    this.position.top = top;\n    this.atop = top;\n  }\n\n  if (left != null) {\n    this.position.left = left;\n    this.aleft = left;\n  }\n\n  return this;\n};\n\nElement.prototype.setSize = function (width, height) {\n  if (typeof width === 'object') {\n    height = width.height;\n    width = width.width;\n  }\n\n  if (width != null) {\n    this.position.width = width;\n    this.width = width;\n  }\n\n  if (height != null) {\n    this.position.height = height;\n    this.height = height;\n  }\n\n  return this;\n};\n\nElement.prototype.setStyle = function (style) {\n  if (style && typeof style === 'object') {\n    Object.assign(this.style, style);\n  }\n  return this;\n};\n\n/**\n * Expose\n */\n\nexport default Element;\n","/**\n * helpers.js - helpers for blessed\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\n/**\n * Modules\n */\n\nimport * as fs from 'fs';\nimport * as unicode from './unicode.js';\n\n/**\n * Type definitions\n */\n\ninterface SortableItem {\n  name: string;\n}\n\ninterface IndexedItem {\n  index: number;\n}\n\ninterface Style {\n  [key: string]: string | boolean;\n}\n\ninterface TagResult {\n  open: string;\n  close: string;\n}\n\ninterface Screen {\n  global?: any;\n}\n\ninterface Element {\n  parseTags?: boolean;\n  screen?: Screen;\n  sattr?(style: any): any;\n  _parseTags?(text: string): string;\n}\n\n/**\n * Helpers\n */\n\nconst helpers = {} as any;\n\n// Placeholder for functions that will be added by blessed.ts\nhelpers.sprintf = null;\nhelpers.tryRead = null;\n\nhelpers.merge = function (a: any, b: any): any {\n  Object.keys(b).forEach(function (key: string) {\n    a[key] = b[key];\n  });\n  return a;\n};\n\nhelpers.asort = function (obj: SortableItem[]): SortableItem[] {\n  return obj.sort(function (a: SortableItem, b: SortableItem) {\n    let aName = a.name.toLowerCase();\n    let bName = b.name.toLowerCase();\n\n    if (aName[0] === '.' && bName[0] === '.') {\n      aName = aName[1];\n      bName = bName[1];\n    } else {\n      aName = aName[0];\n      bName = bName[0];\n    }\n\n    return aName > bName ? 1 : aName < bName ? -1 : 0;\n  });\n};\n\nhelpers.hsort = function (obj: IndexedItem[]): IndexedItem[] {\n  return obj.sort(function (a: IndexedItem, b: IndexedItem) {\n    return b.index - a.index;\n  });\n};\n\nhelpers.findFile = function (start: string, target: string): string | null {\n  return (function read(dir: string): string | null {\n    let files: string[], file: string, stat: any, out: string | null;\n\n    if (dir === '/dev' || dir === '/sys' || dir === '/proc' || dir === '/net') {\n      return null;\n    }\n\n    try {\n      files = fs.readdirSync(dir);\n    } catch (e) {\n      files = [];\n    }\n\n    for (let i = 0; i < files.length; i++) {\n      file = files[i];\n\n      if (file === target) {\n        return (dir === '/' ? '' : dir) + '/' + file;\n      }\n\n      try {\n        stat = fs.lstatSync((dir === '/' ? '' : dir) + '/' + file);\n      } catch (e) {\n        stat = null;\n      }\n\n      if (stat && stat.isDirectory() && !stat.isSymbolicLink()) {\n        out = read((dir === '/' ? '' : dir) + '/' + file);\n        if (out) return out;\n      }\n    }\n\n    return null;\n  })(start);\n};\n\n// Escape text for tag-enabled elements.\nhelpers.escape = function (text: string): string {\n  return text.replace(/[{}]/g, function (ch: string) {\n    return ch === '{' ? '{open}' : '{close}';\n  });\n};\n\nhelpers.parseTags = function (text: string, screen?: Screen): string {\n  return helpers.Element.prototype._parseTags.call(\n    { parseTags: true, screen: screen || helpers.Screen.global },\n    text\n  );\n};\n\nhelpers.generateTags = function (\n  style: Style | null,\n  text?: string | null\n): string | TagResult {\n  let open = '';\n  let close = '';\n\n  Object.keys(style || {}).forEach(function (key: string) {\n    let val = (style as Style)[key];\n    if (typeof val === 'string') {\n      val = val.replace(/^light(?!-)/, 'light-');\n      val = val.replace(/^bright(?!-)/, 'bright-');\n      open = '{' + val + '-' + key + '}' + open;\n      close += '{/' + val + '-' + key + '}';\n    } else {\n      if (val === true) {\n        open = '{' + key + '}' + open;\n        close += '{/' + key + '}';\n      }\n    }\n  });\n\n  if (text != null) {\n    return open + text + close;\n  }\n\n  return {\n    open: open,\n    close: close,\n  };\n};\n\nhelpers.attrToBinary = function (style: any, element?: Element): any {\n  return helpers.Element.prototype.sattr.call(element || {}, style);\n};\n\nhelpers.stripTags = function (text: string): string {\n  if (!text) return '';\n  return text\n    .replace(/{(\\/?)([\\w\\-,;!#]*)}/g, '')\n    .replace(/\\x1b\\[[\\d;]*m/g, '');\n};\n\nhelpers.cleanTags = function (text: string): string {\n  return helpers.stripTags(text).trim();\n};\n\nhelpers.dropUnicode = function (text: string): string {\n  if (!text) return '';\n  return text\n    .replace(unicode.chars.all, '??')\n    .replace(unicode.chars.combining, '')\n    .replace(unicode.chars.surrogate, '?');\n};\n\nObject.defineProperty(helpers, 'Screen', {\n  get() {\n    if (!helpers._screen) {\n      helpers._screen = require('./widgets/screen');\n    }\n    return helpers._screen;\n  },\n  enumerable: true,\n  configurable: true,\n});\n\nObject.defineProperty(helpers, 'Element', {\n  get() {\n    if (!helpers._element) {\n      helpers._element = require('./widgets/element');\n    }\n    return helpers._element;\n  },\n  enumerable: true,\n  configurable: true,\n});\n\n// Export individual functions for named imports\nexport const merge = helpers.merge;\nexport const asort = helpers.asort;\nexport const hsort = helpers.hsort;\nexport const findFile = helpers.findFile;\nexport const escape = helpers.escape;\nexport const parseTags = helpers.parseTags;\nexport const generateTags = helpers.generateTags;\nexport const attrToBinary = helpers.attrToBinary;\nexport const stripTags = helpers.stripTags;\nexport const cleanTags = helpers.cleanTags;\nexport const dropUnicode = helpers.dropUnicode;\n\n// Make sure all named exports are also available on helpers object\nObject.assign(helpers, {\n  merge,\n  asort,\n  hsort,\n  findFile,\n  escape,\n  parseTags,\n  generateTags,\n  attrToBinary,\n  stripTags,\n  cleanTags,\n  dropUnicode,\n});\n\nexport default helpers;\n","/**\n * scrollablebox.js - scrollable box element for blessed\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\n/**\n * Modules\n */\n\nimport Node from './node.js';\nimport box from './box.js';\n\n// Extract the Box class from the factory function\nconst Box = box.Box;\n\n/**\n * Interfaces\n */\n\ninterface ScrollbarStyle {\n  fg?: string;\n  bg?: string;\n  bold?: boolean;\n  underline?: boolean;\n  inverse?: boolean;\n  invisible?: boolean;\n}\n\nexport interface ScrollbarConfig {\n  ch?: string;\n  style?: ScrollbarStyle;\n  fg?: string;\n  bg?: string;\n  bold?: boolean;\n  underline?: boolean;\n  inverse?: boolean;\n  invisible?: boolean;\n  track?: TrackConfig;\n}\n\nexport interface TrackConfig {\n  ch?: string;\n  style?: ScrollbarStyle;\n  fg?: string;\n  bg?: string;\n  bold?: boolean;\n  underline?: boolean;\n  inverse?: boolean;\n  invisible?: boolean;\n}\n\nexport interface ScrollableBoxOptions {\n  scrollable?: boolean;\n  baseLimit?: number;\n  alwaysScroll?: boolean;\n  scrollbar?: ScrollbarConfig;\n  track?: TrackConfig;\n  mouse?: boolean;\n  keys?: boolean;\n  ignoreKeys?: boolean;\n  vi?: boolean;\n  [key: string]: any;\n}\n\ninterface ScrollableBoxStyle {\n  scrollbar?: ScrollbarStyle;\n  track?: ScrollbarStyle;\n  [key: string]: any;\n}\n\ninterface MouseData {\n  x: number;\n  y: number;\n  action: string;\n  button?: string;\n}\n\ninterface KeyData {\n  name: string;\n  ctrl?: boolean;\n  shift?: boolean;\n  meta?: boolean;\n}\n\ninterface ScrollableBoxScreen {\n  _dragging?: any;\n  render(): void;\n  cleanSides(element: any): boolean;\n  deleteLine(count: number, top: number, left: number, bottom: number): void;\n  insertLine(count: number, top: number, left: number, bottom: number): void;\n}\n\nexport interface ScrollableBoxCoords {\n  xi: number;\n  xl: number;\n  yi: number;\n  yl: number;\n}\n\ninterface ScrollableBoxInterface extends Box {\n  type: string;\n  scrollable: boolean;\n  childOffset: number;\n  childBase: number;\n  baseLimit: number;\n  alwaysScroll?: boolean;\n  scrollbar?: ScrollbarConfig;\n  track?: TrackConfig;\n  style: ScrollableBoxStyle;\n  screen: ScrollableBoxScreen;\n  options: ScrollableBoxOptions;\n  _scrollingBar?: boolean;\n  _drag?: any;\n  _isList?: boolean;\n  items?: any[];\n  lpos?: ScrollableBoxCoords & { _scrollBottom?: number };\n  children: any[];\n  _clines: any[];\n  aleft: number;\n  atop: number;\n  width: number;\n  height: number;\n  iright: number;\n  iheight: number;\n  itop: number;\n  ibottom: number;\n  rtop: number;\n  detached: boolean;\n  shrink?: boolean;\n  reallyScrollable: boolean;\n\n  // Methods\n  _scrollBottom(): number;\n  setScroll(offset: number, always?: boolean): any;\n  scrollTo(offset: number, always?: boolean): any;\n  getScroll(): number;\n  scroll(offset: number, always?: boolean): any;\n  _recalculateIndex(): number;\n  resetScroll(): any;\n  getScrollHeight(): number;\n  getScrollPerc(s?: boolean): number;\n  setScrollPerc(i: number): any;\n  parseContent(): void;\n  emit(event: string): any;\n  on(event: string, listener: Function): void;\n  onScreenEvent(event: string, listener: Function): void;\n  removeScreenEvent(event: string, listener: Function): void;\n  _getCoords(get?: boolean, noscroll?: boolean): ScrollableBoxCoords | null;\n}\n\n/**\n * ScrollableBox - Modern ES6 Class\n */\n\nclass ScrollableBox extends Box {\n  type = 'scrollable-box';\n  scrollable = true;\n  childOffset = 0;\n  childBase = 0;\n  baseLimit: number;\n  alwaysScroll?: boolean;\n  scrollbar?: ScrollbarConfig;\n  track?: TrackConfig;\n  _scrollingBar?: boolean;\n  _drag?: any;\n  _isList?: boolean;\n  items?: any[];\n  lpos?: ScrollableBoxCoords & { _scrollBottom?: number };\n\n  constructor(options?: ScrollableBoxOptions) {\n    // Handle malformed options gracefully\n    if (!options || typeof options !== 'object' || Array.isArray(options)) {\n      options = {};\n    }\n\n    // Set default scrollable option\n    if (options.scrollable === undefined) {\n      options.scrollable = true;\n    }\n\n    super(options);\n\n    if (options.scrollable === false) {\n      this.scrollable = false;\n      return;\n    }\n\n    this.baseLimit = options.baseLimit || Infinity;\n    this.alwaysScroll = options.alwaysScroll;\n\n    this.scrollbar = options.scrollbar;\n    if (this.scrollbar) {\n      this.scrollbar.ch = this.scrollbar.ch || ' ';\n      this.style.scrollbar = this.style.scrollbar || this.scrollbar.style;\n      if (!this.style.scrollbar) {\n        this.style.scrollbar = {};\n        this.style.scrollbar.fg = this.scrollbar.fg;\n        this.style.scrollbar.bg = this.scrollbar.bg;\n        this.style.scrollbar.bold = this.scrollbar.bold;\n        this.style.scrollbar.underline = this.scrollbar.underline;\n        this.style.scrollbar.inverse = this.scrollbar.inverse;\n        this.style.scrollbar.invisible = this.scrollbar.invisible;\n      }\n      //this.scrollbar.style = this.style.scrollbar;\n      if (this.track || this.scrollbar.track) {\n        this.track = this.scrollbar.track || this.track;\n        this.style.track = this.style.scrollbar.track || this.style.track;\n        this.track.ch = this.track.ch || ' ';\n        this.style.track = this.style.track || this.track.style;\n        if (!this.style.track) {\n          this.style.track = {};\n          this.style.track.fg = this.track.fg;\n          this.style.track.bg = this.track.bg;\n          this.style.track.bold = this.track.bold;\n          this.style.track.underline = this.track.underline;\n          this.style.track.inverse = this.track.inverse;\n          this.style.track.invisible = this.track.invisible;\n        }\n        this.track.style = this.style.track;\n      }\n      // Allow controlling of the scrollbar via the mouse:\n      if (options.mouse) {\n        this.on('mousedown', (data: MouseData) => {\n          if (this._scrollingBar) {\n            // Do not allow dragging on the scrollbar:\n            delete this.screen._dragging;\n            delete this._drag;\n            return;\n          }\n          var x = data.x - this.aleft;\n          var y = data.y - this.atop;\n          if (x === this.width - this.iright - 1) {\n            // Do not allow dragging on the scrollbar:\n            delete this.screen._dragging;\n            delete this._drag;\n            var perc = (y - this.itop) / (this.height - this.iheight);\n            this.setScrollPerc((perc * 100) | 0);\n            this.screen.render();\n            var smd, smu;\n            this._scrollingBar = true;\n            this.onScreenEvent(\n              'mousedown',\n              (smd = (data: MouseData) => {\n                var y = data.y - this.atop;\n                var perc = y / this.height;\n                this.setScrollPerc((perc * 100) | 0);\n                this.screen.render();\n              })\n            );\n            // If mouseup occurs out of the window, no mouseup event fires, and\n            // scrollbar will drag again on mousedown until another mouseup\n            // occurs.\n            this.onScreenEvent(\n              'mouseup',\n              (smu = () => {\n                this._scrollingBar = false;\n                this.removeScreenEvent('mousedown', smd);\n                this.removeScreenEvent('mouseup', smu);\n              })\n            );\n          }\n        });\n      }\n    }\n\n    if (options.mouse) {\n      this.on('wheeldown', () => {\n        this.scroll((this.height / 2) | 0 || 1);\n        this.screen.render();\n      });\n      this.on('wheelup', () => {\n        this.scroll(-((this.height / 2) | 0) || -1);\n        this.screen.render();\n      });\n    }\n\n    if (options.keys && !options.ignoreKeys) {\n      this.on('keypress', (ch: string, key: KeyData) => {\n        if (key.name === 'up' || (options.vi && key.name === 'k')) {\n          this.scroll(-1);\n          this.screen.render();\n          return;\n        }\n        if (key.name === 'down' || (options.vi && key.name === 'j')) {\n          this.scroll(1);\n          this.screen.render();\n          return;\n        }\n        if (options.vi && key.name === 'u' && key.ctrl) {\n          this.scroll(-((this.height / 2) | 0) || -1);\n          this.screen.render();\n          return;\n        }\n        if (options.vi && key.name === 'd' && key.ctrl) {\n          this.scroll((this.height / 2) | 0 || 1);\n          this.screen.render();\n          return;\n        }\n        if (options.vi && key.name === 'b' && key.ctrl) {\n          this.scroll(-this.height || -1);\n          this.screen.render();\n          return;\n        }\n        if (options.vi && key.name === 'f' && key.ctrl) {\n          this.scroll(this.height || 1);\n          this.screen.render();\n          return;\n        }\n        if (options.vi && key.name === 'g' && !key.shift) {\n          this.scrollTo(0);\n          this.screen.render();\n          return;\n        }\n        if (options.vi && key.name === 'g' && key.shift) {\n          this.scrollTo(this.getScrollHeight());\n          this.screen.render();\n          return;\n        }\n      });\n    }\n\n    this.on('parsed content', () => {\n      this._recalculateIndex();\n    });\n\n    // Defer initial recalculation to next tick to ensure full initialization\n    setImmediate(() => {\n      if (this._recalculateIndex) {\n        this._recalculateIndex();\n      }\n    });\n  }\n\n  // XXX Potentially use this in place of scrollable checks elsewhere.\n  get reallyScrollable(): boolean {\n    if (this.shrink) return this.scrollable;\n    return this.getScrollHeight() > this.height;\n  }\n\n  _scrollBottom(): number {\n    if (!this.scrollable) return 0;\n\n    // We could just calculate the children, but we can\n    // optimize for lists by just returning the items.length.\n    if (this._isList) {\n      return this.items ? this.items.length : 0;\n    }\n\n    if (this.lpos && this.lpos._scrollBottom) {\n      return this.lpos._scrollBottom;\n    }\n\n    var bottom = this.children.reduce((current, el) => {\n      // el.height alone does not calculate the shrunken height, we need to use\n      // getCoords. A shrunken box inside a scrollable element will not grow any\n      // larger than the scrollable element's context regardless of how much\n      // content is in the shrunken box, unless we do this (call getCoords\n      // without the scrollable calculation):\n      // See: $ node test/widget-shrink-fail-2.js\n      if (!el.detached) {\n        var lpos = el._getCoords(false, true);\n        if (lpos) {\n          return Math.max(current, el.rtop + (lpos.yl - lpos.yi));\n        }\n      }\n      return Math.max(current, el.rtop + el.height);\n    }, 0);\n\n    // XXX Use this? Makes .getScrollHeight() useless!\n    // if (bottom < this._clines.length) bottom = this._clines.length;\n\n    if (this.lpos) this.lpos._scrollBottom = bottom;\n\n    return bottom;\n  }\n\n  setScroll(offset: number, always?: boolean): any {\n    // XXX\n    // At first, this appeared to account for the first new calculation of childBase:\n    this.scroll(0);\n    return this.scroll(offset - (this.childBase + this.childOffset), always);\n  }\n\n  scrollTo(offset: number, always?: boolean): any {\n    return this.setScroll(offset, always);\n  }\n\n  getScroll(): number {\n    return this.childBase + this.childOffset;\n  }\n\n  scroll(offset: number, always?: boolean): any {\n    if (!this.scrollable) return;\n\n    if (this.detached) return;\n\n    // Handle scrolling.\n    var visible = this.height - this.iheight,\n      base = this.childBase,\n      d,\n      p,\n      t,\n      b,\n      max,\n      emax;\n\n    if (this.alwaysScroll || always) {\n      // Semi-workaround\n      this.childOffset = offset > 0 ? visible - 1 + offset : offset;\n    } else {\n      this.childOffset += offset;\n    }\n\n    if (this.childOffset > visible - 1) {\n      d = this.childOffset - (visible - 1);\n      this.childOffset -= d;\n      this.childBase += d;\n    } else if (this.childOffset < 0) {\n      d = this.childOffset;\n      this.childOffset += -d;\n      this.childBase += d;\n    }\n\n    if (this.childBase < 0) {\n      this.childBase = 0;\n    } else if (this.childBase > this.baseLimit) {\n      this.childBase = this.baseLimit;\n    }\n\n    // Find max \"bottom\" value for\n    // content and descendant elements.\n    // Scroll the content if necessary.\n    if (this.childBase === base) {\n      return this.emit('scroll');\n    }\n\n    // When scrolling text, we want to be able to handle SGR codes as well as line\n    // feeds. This allows us to take preformatted text output from other programs\n    // and put it in a scrollable text box.\n    this.parseContent();\n\n    // XXX\n    // max = this.getScrollHeight() - (this.height - this.iheight);\n\n    max = this._clines.length - (this.height - this.iheight);\n    if (max < 0) max = 0;\n    emax = this._scrollBottom() - (this.height - this.iheight);\n    if (emax < 0) emax = 0;\n\n    this.childBase = Math.min(this.childBase, Math.max(emax, max));\n\n    if (this.childBase < 0) {\n      this.childBase = 0;\n    } else if (this.childBase > this.baseLimit) {\n      this.childBase = this.baseLimit;\n    }\n\n    // Optimize scrolling with CSR + IL/DL.\n    p = this.lpos;\n    // Only really need _getCoords() if we want\n    // to allow nestable scrolling elements...\n    // or if we **really** want shrinkable\n    // scrolling elements.\n    // p = this._getCoords();\n    if (p && this.childBase !== base && this.screen.cleanSides(this)) {\n      t = p.yi + this.itop;\n      b = p.yl - this.ibottom - 1;\n      d = this.childBase - base;\n\n      if (d > 0 && d < visible) {\n        // scrolled down\n        this.screen.deleteLine(d, t, t, b);\n      } else if (d < 0 && -d < visible) {\n        // scrolled up\n        d = -d;\n        this.screen.insertLine(d, t, t, b);\n      }\n    }\n\n    return this.emit('scroll');\n  }\n\n  _recalculateIndex(): number {\n    var max, emax;\n\n    if (this.detached || !this.scrollable) {\n      return 0;\n    }\n\n    // XXX\n    // max = this.getScrollHeight() - (this.height - this.iheight);\n\n    max = this._clines.length - (this.height - this.iheight);\n    if (max < 0) max = 0;\n    emax = this._scrollBottom() - (this.height - this.iheight);\n    if (emax < 0) emax = 0;\n\n    this.childBase = Math.min(this.childBase, Math.max(emax, max));\n\n    if (this.childBase < 0) {\n      this.childBase = 0;\n    } else if (this.childBase > this.baseLimit) {\n      this.childBase = this.baseLimit;\n    }\n\n    return 0;\n  }\n\n  resetScroll(): any {\n    if (!this.scrollable) return;\n    this.childOffset = 0;\n    this.childBase = 0;\n    return this.emit('scroll');\n  }\n\n  getScrollHeight(): number {\n    return Math.max(this._clines.length, this._scrollBottom());\n  }\n\n  getScrollPerc(s?: boolean): number {\n    var pos = this.lpos || this._getCoords();\n    if (!pos) return s ? -1 : 0;\n\n    var height = pos.yl - pos.yi - this.iheight,\n      i = this.getScrollHeight(),\n      p;\n\n    if (height < i) {\n      if (this.alwaysScroll) {\n        p = this.childBase / (i - height);\n      } else {\n        p = (this.childBase + this.childOffset) / (i - 1);\n      }\n      return p * 100;\n    }\n\n    return s ? -1 : 0;\n  }\n\n  setScrollPerc(i: number): any {\n    // XXX\n    // var m = this.getScrollHeight();\n    var m = Math.max(this._clines.length, this._scrollBottom());\n    return this.scrollTo(((i / 100) * m) | 0);\n  }\n}\n\n/**\n * Factory function for backward compatibility\n */\nfunction scrollableBox(options?: ScrollableBoxOptions): ScrollableBoxInterface {\n  return new ScrollableBox(options) as ScrollableBoxInterface;\n}\n\n// Attach the class as a property for direct access\nscrollableBox.ScrollableBox = ScrollableBox;\n\n/**\n * Expose\n */\n\nexport default scrollableBox;\n","/**\n * scrollabletext.js - scrollable text element for blessed\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\n/**\n * Modules\n */\n\nimport Node from './node.js';\nimport scrollableBox from './scrollablebox.js';\n\n// Extract the ScrollableBox class from the factory function\nconst ScrollableBox = scrollableBox.ScrollableBox;\n\n/**\n * Type definitions\n */\n\nexport interface ScrollableTextOptions {\n  alwaysScroll?: boolean;\n  [key: string]: any;\n}\n\ninterface ScrollableTextInterface extends ScrollableBox {\n  type: string;\n}\n\n/**\n * ScrollableText - Modern ES6 Class\n */\n\nclass ScrollableText extends ScrollableBox {\n  type = 'scrollable-text';\n\n  constructor(options?: ScrollableTextOptions) {\n    // Handle malformed options gracefully\n    if (!options || typeof options !== 'object' || Array.isArray(options)) {\n      options = {};\n    }\n\n    // Always enable scrolling for scrollable text\n    options.alwaysScroll = true;\n\n    super(options);\n  }\n}\n\n/**\n * Factory function for backward compatibility\n */\nfunction scrollableText(\n  options?: ScrollableTextOptions\n): ScrollableTextInterface {\n  return new ScrollableText(options) as ScrollableTextInterface;\n}\n\n// Attach the class as a property for direct access\nscrollableText.ScrollableText = ScrollableText;\n\n/**\n * Expose\n */\n\nexport default scrollableText;\n","/**\n * log.js - log element for blessed\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\n/**\n * Modules\n */\n\nimport * as util from 'util';\n\nconst nextTick = (global as any).setImmediate || process.nextTick.bind(process);\n\nimport Node from './node.js';\nimport scrollableText from './scrollabletext.js';\n\n// Extract the ScrollableText class from the factory function\nconst ScrollableText = scrollableText.ScrollableText;\n\n/**\n * Type definitions\n */\n\ninterface LogOptions {\n  scrollback?: number;\n  scrollOnInput?: boolean;\n  [key: string]: any;\n}\n\ninterface LogScreen {\n  render(): void;\n}\n\ninterface LogInterface extends ScrollableText {\n  type: string;\n  scrollback: number;\n  scrollOnInput?: boolean;\n  screen: LogScreen;\n  _userScrolled: boolean;\n  _clines: {\n    fake: any[];\n  };\n  on(event: string, listener: (...args: any[]) => void): void;\n  emit(event: string, ...args: any[]): boolean;\n  setScrollPerc(percentage: number): void;\n  getScrollPerc(): number;\n  pushLine(text: string): any;\n  shiftLine(start: number, count: number): void;\n  _scroll(offset: number, always?: boolean): any;\n}\n\n/**\n * Log - Modern ES6 Class\n */\n\nclass Log extends ScrollableText {\n  type = 'log';\n  scrollback: number;\n  scrollOnInput?: boolean;\n  _userScrolled: boolean = false;\n  _originalScroll: any;\n\n  constructor(options?: LogOptions) {\n    // Handle malformed options gracefully\n    if (!options || typeof options !== 'object' || Array.isArray(options)) {\n      options = {};\n    }\n\n    super(options);\n\n    this.scrollback =\n      options.scrollback != null ? options.scrollback : Infinity;\n    this.scrollOnInput = options.scrollOnInput;\n\n    // Store original scroll method for later use\n    this._originalScroll = super.scroll;\n\n    const self = this;\n    this.on('set content', function () {\n      if (!self._userScrolled || self.scrollOnInput) {\n        nextTick(function () {\n          self.setScrollPerc(100);\n          self._userScrolled = false;\n          self.screen.render();\n        });\n      }\n    });\n  }\n\n  log(...args: any[]): any {\n    const argsArray = Array.prototype.slice.call(arguments);\n    if (typeof argsArray[0] === 'object') {\n      let output = util.inspect(argsArray[0], {\n        depth: 1,\n        colors: true,\n        maxArrayLength: 50,\n      });\n      if (output.length < 1000) {\n        output = util.inspect(argsArray[0], {\n          depth: 2,\n          colors: true,\n          maxArrayLength: 50,\n        });\n      }\n      argsArray[0] = output;\n    }\n    const text = util.format.apply(util, argsArray);\n    this.emit('log', text);\n    const ret = this.pushLine(text);\n    if (this._clines.fake.length > this.scrollback) {\n      this.shiftLine(0, (this.scrollback / 3) | 0);\n    }\n    return ret;\n  }\n\n  // Alias for log method\n  add(...args: any[]): any {\n    return this.log(...args);\n  }\n\n  scroll(offset: number, always?: boolean): any {\n    if (offset === 0) return this._originalScroll.call(this, offset, always);\n    this._userScrolled = true;\n    const ret = this._originalScroll.call(this, offset, always);\n    if (this.getScrollPerc() === 100) {\n      this._userScrolled = false;\n    }\n    return ret;\n  }\n}\n\n/**\n * Factory function for backward compatibility\n */\nfunction log(options?: LogOptions): LogInterface {\n  return new Log(options) as LogInterface;\n}\n\n// Attach the class as a property for direct access\nlog.Log = Log;\n\n/**\n * Expose\n */\n\nexport default log;\n","/**\n * screen.js - screen node for blessed\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\n/**\n * Modules\n */\n\nimport path from 'path';\nimport fs from 'fs';\nimport cp from 'child_process';\nimport os from 'os';\n\nimport * as colors from '../colors.js';\nimport program from '../program.js';\nimport * as unicode from '../unicode.js';\n\nvar nextTick = global.setImmediate || process.nextTick.bind(process);\n\nimport * as helpers from '../helpers.js';\n\nimport Node from './node.js';\nimport Log from './log.js';\nimport Element from './element.js';\nimport boxFactory from './box.js';\nconst Box = boxFactory.Box;\n\n/**\n * Interfaces\n */\n\ninterface ScreenOptions {\n  program?: any;\n  rsety?: boolean;\n  listen?: boolean;\n  input?: any;\n  output?: any;\n  term?: string;\n  terminal?: string;\n  cursor?: any;\n  log?: string;\n  debug?: boolean;\n  dump?: boolean;\n  smartCSR?: boolean;\n  useBCE?: boolean;\n  resizeTimeout?: number;\n  tabSize?: number;\n  autoPadding?: boolean;\n  warnings?: boolean;\n  buffer?: boolean;\n  fullUnicode?: boolean;\n  dockBorders?: boolean;\n  ignoreDockContrast?: boolean;\n  ignoreLocked?: boolean;\n  sendFocus?: boolean;\n  fastCSR?: boolean;\n  title?: string;\n  tput?: boolean;\n  zero?: boolean;\n  padding?: any;\n  margin?: any;\n  left?: number;\n  right?: number;\n  top?: number;\n  bottom?: number;\n  width?: number;\n  height?: number;\n  [key: string]: any;\n}\n\ninterface ScreenInterface extends Node {\n  type: string;\n  program: any;\n  tput: any;\n  _$: any;\n  options: ScreenOptions;\n  position: any;\n\n  // Screen properties\n  lines: any[][];\n  olines: any[][];\n  _buf: string;\n  _ci: number;\n  width: number;\n  height: number;\n  cols: number;\n  rows: number;\n  focused: any;\n  _focus: any;\n  grabKeys: boolean;\n  lockKeys: boolean;\n  hover: any;\n  history: any[];\n  clickable: any[];\n  keyable: any[];\n  _decScroll: boolean;\n\n  // Various flags and settings\n  title: string;\n  cursor: any;\n  _cursor: any;\n  fullUnicode: boolean;\n  dockBorders: boolean;\n  ignoreDockContrast: boolean;\n  ignoreLocked: boolean;\n  sendFocus: boolean;\n  fastCSR: boolean;\n  useBCE: boolean;\n  resizeTimeout: number;\n  tabSize: number;\n  autoPadding: boolean;\n  tabc: string;\n\n  // Methods\n  render(): void;\n  draw(start: number, end: number): void;\n  blankLine(ch?: string, dirty?: boolean): any[];\n  insertLine(n: number, y: number, top: number, bottom: number): void;\n  deleteLine(n: number, y: number, top: number, bottom: number): void;\n  insertLineNC(n: number, y: number, top: number, bottom: number): void;\n  deleteLineNC(n: number, y: number, top: number, bottom: number): void;\n  redrawLine(y: number): void;\n  redrawRegion(xi: number, xl: number, yi: number, yl: number): void;\n  clearRegion(xi: number, xl: number, yi: number, yl: number): void;\n  fillRegion(\n    attr: number,\n    ch: string,\n    xi: number,\n    xl: number,\n    yi: number,\n    yl: number\n  ): void;\n  focusOffset(offset: number): void;\n  focusPrev(): any;\n  focusNext(): any;\n  focusPush(el: any): void;\n  focusPop(): any;\n  saveFocus(): void;\n  restoreFocus(): any;\n  rewindFocus(): any;\n  key(key: string | string[], listener: Function): void;\n  onceKey(key: string | string[], listener: Function): void;\n  unkey(key: string | string[], listener?: Function): void;\n  spawn(file: string, args?: string[], options?: any): any;\n  exec(file: string, args?: string[], options?: any, callback?: Function): any;\n  readEditor(options?: any, callback?: Function): any;\n  setEffects(\n    el: any,\n    fel: any,\n    over: any,\n    out: any,\n    effects: any,\n    temp: any\n  ): void;\n  sigtstp(callback?: Function): void;\n  copyToClipboard(text: string): void;\n  cursorShape(shape: string, blink?: boolean): boolean;\n  cursorColor(color: string): boolean;\n  cursorReset(): boolean;\n  screenshot(\n    xi?: number,\n    xl?: number,\n    yi?: number,\n    yl?: number,\n    term?: any\n  ): string;\n  destroy(): void;\n  log(...args: any[]): void;\n  debug(...args: any[]): void;\n  alloc(): void;\n  realloc(): void;\n  _listenKeys(el: any): void;\n  _listenMouse(el: any): void;\n}\n\n/**\n * Screen\n */\n\nfunction Screen(this: ScreenInterface, options?: ScreenOptions) {\n  var self = this;\n\n  if (!(this instanceof Node)) {\n    return new Screen(options);\n  }\n\n  Screen.bind(this);\n\n  options = options || {};\n  if (options.rsety && options.listen) {\n    options = { program: options };\n  }\n\n  this.program = options.program;\n\n  if (!this.program) {\n    this.program = program({\n      input: options.input,\n      output: options.output,\n      log: options.log,\n      debug: options.debug,\n      dump: options.dump,\n      terminal: options.terminal || options.term,\n      resizeTimeout: options.resizeTimeout,\n      forceUnicode: options.forceUnicode,\n      tput: true,\n      buffer: true,\n      zero: true,\n    });\n  } else {\n    this.program.setupTput();\n    this.program.useBuffer = true;\n    this.program.zero = true;\n    this.program.options.resizeTimeout = options.resizeTimeout;\n    if (options.forceUnicode != null) {\n      this.program.tput.features.unicode = options.forceUnicode;\n      this.program.tput.unicode = options.forceUnicode;\n    }\n  }\n\n  this.tput = this.program.tput;\n\n  Node.call(this, options);\n\n  this.autoPadding = options.autoPadding !== false;\n  this.tabc = Array((options.tabSize || 4) + 1).join(' ');\n  this.dockBorders = options.dockBorders;\n\n  this.ignoreLocked = options.ignoreLocked || [];\n\n  this._unicode = this.tput.unicode || this.tput.numbers.U8 === 1;\n  this.fullUnicode = this.options.fullUnicode && this._unicode;\n\n  // Updated attribute format for 24-bit color support:\n  // We pack everything into a JS number (53-bit safe integer)\n  // But since bitwise ops are 32-bit, we handle it carefully:\n  // Background: bits 0-23 (24 bits for RGB)\n  // Foreground: bits 24-47 (24 bits for RGB) - handled with Math\n  // Flags: bits 48-52 (5 bits) - handled with Math\n  // Default color: 0xffffff means \"use default\"\n  this.dattr = 0xffffff + 0xffffff * 0x1000000; // bg + (fg * 2^24)\n\n  this.renders = 0;\n  this.position = {\n    left: (this.left = this.aleft = this.rleft = 0),\n    right: (this.right = this.aright = this.rright = 0),\n    top: (this.top = this.atop = this.rtop = 0),\n    bottom: (this.bottom = this.abottom = this.rbottom = 0),\n    get height() {\n      return self.height;\n    },\n    get width() {\n      return self.width;\n    },\n  };\n\n  this.ileft = 0;\n  this.itop = 0;\n  this.iright = 0;\n  this.ibottom = 0;\n  this.iheight = 0;\n  this.iwidth = 0;\n\n  this.padding = {\n    left: 0,\n    top: 0,\n    right: 0,\n    bottom: 0,\n  };\n\n  this.hover = null;\n  this.history = [];\n  this.clickable = [];\n  this.keyable = [];\n  this.grabKeys = false;\n  this.lockKeys = false;\n  this.focused;\n  this._buf = '';\n\n  this._ci = -1;\n\n  if (options.title) {\n    this.title = options.title;\n  }\n\n  options.cursor = options.cursor || {\n    artificial: options.artificialCursor,\n    shape: options.cursorShape,\n    blink: options.cursorBlink,\n    color: options.cursorColor,\n  };\n\n  this.cursor = {\n    artificial: options.cursor.artificial || false,\n    shape: options.cursor.shape || 'block',\n    blink: options.cursor.blink || false,\n    color: options.cursor.color || null,\n    _set: false,\n    _state: 1,\n    _hidden: true,\n  };\n\n  this.program.on('resize', function () {\n    self.alloc();\n    self.render();\n    (function emit(el) {\n      el.emit('resize');\n      el.children.forEach(emit);\n    })(self);\n  });\n\n  this.program.on('focus', function () {\n    self.emit('focus');\n  });\n\n  this.program.on('blur', function () {\n    self.emit('blur');\n  });\n\n  this.program.on('warning', function (text) {\n    self.emit('warning', text);\n  });\n\n  this.on('newListener', function fn(type) {\n    if (type === 'keypress' || type.indexOf('key ') === 0 || type === 'mouse') {\n      if (type === 'keypress' || type.indexOf('key ') === 0) self._listenKeys();\n      if (type === 'mouse') self._listenMouse();\n    }\n    if (\n      type === 'mouse' ||\n      type === 'click' ||\n      type === 'mouseover' ||\n      type === 'mouseout' ||\n      type === 'mousedown' ||\n      type === 'mouseup' ||\n      type === 'mousewheel' ||\n      type === 'wheeldown' ||\n      type === 'wheelup' ||\n      type === 'mousemove'\n    ) {\n      self._listenMouse();\n    }\n  });\n\n  this.setMaxListeners(Infinity);\n\n  this.enter();\n\n  this.postEnter();\n}\n\nScreen.global = null;\n\nScreen.total = 0;\n\nScreen.instances = [];\n\nScreen.bind = function (screen) {\n  if (!Screen.global) {\n    Screen.global = screen;\n  }\n\n  if (!~Screen.instances.indexOf(screen)) {\n    Screen.instances.push(screen);\n    screen.index = Screen.total;\n    Screen.total++;\n  }\n\n  if (Screen._bound) return;\n  Screen._bound = true;\n\n  process.on(\n    'uncaughtException',\n    (Screen._exceptionHandler = function (err) {\n      Screen.instances.slice().forEach(function (screen) {\n        screen.destroy();\n      });\n      err = err || new Error('Uncaught Exception.');\n      process.stderr.write((err.stack || err) + '\\n');\n\n      // Don't exit in test environment\n      const isTestEnv =\n        process.env.NODE_ENV === 'test' ||\n        process.env.VITEST === 'true' ||\n        typeof global.expect !== 'undefined';\n\n      if (!isTestEnv) {\n        nextTick(function () {\n          process.exit(1);\n        });\n      }\n    })\n  );\n\n  ['SIGTERM', 'SIGINT', 'SIGQUIT'].forEach(function (signal) {\n    var name = '_' + signal.toLowerCase() + 'Handler';\n    process.on(\n      signal,\n      (Screen[name] = function () {\n        if (process.listeners(signal).length > 1) {\n          return;\n        }\n        nextTick(function () {\n          process.exit(0);\n        });\n      })\n    );\n  });\n\n  process.on(\n    'exit',\n    (Screen._exitHandler = function () {\n      Screen.instances.slice().forEach(function (screen) {\n        screen.destroy();\n      });\n    })\n  );\n};\n\nScreen.prototype.__proto__ = Node.prototype;\n\nScreen.prototype.type = 'screen';\n\nScreen.prototype.__defineGetter__('title', function () {\n  return this.program.title;\n});\n\nScreen.prototype.__defineSetter__('title', function (title) {\n  return (this.program.title = title);\n});\n\nScreen.prototype.__defineGetter__('terminal', function () {\n  return this.program.terminal;\n});\n\nScreen.prototype.__defineSetter__('terminal', function (terminal) {\n  this.setTerminal(terminal);\n  return this.program.terminal;\n});\n\nScreen.prototype.setTerminal = function (\n  this: ScreenInterface,\n  terminal: string\n): void {\n  var entered = !!this.program.isAlt;\n  if (entered) {\n    this._buf = '';\n    this.program._buf = '';\n    this.leave();\n  }\n  this.program.setTerminal(terminal);\n  this.tput = this.program.tput;\n  if (entered) {\n    this.enter();\n  }\n};\n\nScreen.prototype.enter = function (this: ScreenInterface): void {\n  if (this.program.isAlt) return;\n  if (!this.cursor._set) {\n    if (this.options.cursor.shape) {\n      this.cursorShape(this.cursor.shape, this.cursor.blink);\n    }\n    if (this.options.cursor.color) {\n      this.cursorColor(this.cursor.color);\n    }\n  }\n  if (process.platform === 'win32') {\n    try {\n      cp.execSync('cls', { stdio: 'ignore', timeout: 1000 });\n    } catch (e) {}\n  }\n  this.program.alternateBuffer();\n  this.program.put.keypad_xmit();\n  this.program.csr(0, this.height - 1);\n  this.program.hideCursor();\n  this.program.cup(0, 0);\n  // We need this for tmux now:\n  if (this.tput.strings.ena_acs) {\n    this.program._write(this.tput.enacs());\n  }\n  this.alloc();\n};\n\nScreen.prototype.leave = function (this: ScreenInterface): void {\n  if (!this.program || !this.program.isAlt) return;\n  this.program.put.keypad_local();\n  if (\n    this.program.scrollTop !== 0 ||\n    this.program.scrollBottom !== this.rows - 1\n  ) {\n    this.program.csr(0, this.height - 1);\n  }\n  // XXX For some reason if alloc/clear() is before this\n  // line, it doesn't work on linux console.\n  this.program.showCursor();\n  this.alloc();\n  if (this._listenedMouse) {\n    this.program.disableMouse();\n  }\n  this.program.normalBuffer();\n  if (this.cursor._set) this.cursorReset();\n  this.program.flush();\n  if (process.platform === 'win32') {\n    try {\n      cp.execSync('cls', { stdio: 'ignore', timeout: 1000 });\n    } catch (e) {}\n  }\n};\n\nScreen.prototype.postEnter = function (this: ScreenInterface): void {\n  var self = this;\n  if (this.options.debug) {\n    this.debugLog = new Log({\n      screen: this,\n      parent: this,\n      hidden: true,\n      draggable: true,\n      left: 'center',\n      top: 'center',\n      width: '30%',\n      height: '30%',\n      border: 'line',\n      label: ' {bold}Debug Log{/bold} ',\n      tags: true,\n      keys: true,\n      vi: true,\n      mouse: true,\n      scrollbar: {\n        ch: ' ',\n        track: {\n          bg: 'yellow',\n        },\n        style: {\n          inverse: true,\n        },\n      },\n    });\n\n    this.debugLog.toggle = function () {\n      if (self.debugLog.hidden) {\n        self.saveFocus();\n        self.debugLog.show();\n        self.debugLog.setFront();\n        self.debugLog.focus();\n      } else {\n        self.debugLog.hide();\n        self.restoreFocus();\n      }\n      self.render();\n    };\n\n    this.debugLog.key(['q', 'escape'], self.debugLog.toggle);\n    this.key('f12', self.debugLog.toggle);\n  }\n\n  if (this.options.warnings) {\n    this.on('warning', function (text) {\n      var warning = new Box({\n        screen: self,\n        parent: self,\n        left: 'center',\n        top: 'center',\n        width: 'shrink',\n        padding: 1,\n        height: 'shrink',\n        align: 'center',\n        valign: 'middle',\n        border: 'line',\n        label: ' {red-fg}{bold}WARNING{/} ',\n        content: '{bold}' + text + '{/bold}',\n        tags: true,\n      });\n      self.render();\n      var timeout = setTimeout(function () {\n        warning.destroy();\n        self.render();\n      }, 1500);\n      if (timeout.unref) {\n        timeout.unref();\n      }\n    });\n  }\n};\n\nScreen.prototype._destroy = Screen.prototype.destroy;\nScreen.prototype.destroy = function (this: ScreenInterface): void {\n  this.leave();\n\n  var index = Screen.instances.indexOf(this);\n  if (~index) {\n    Screen.instances.splice(index, 1);\n    Screen.total--;\n\n    Screen.global = Screen.instances[0];\n\n    if (Screen.total === 0) {\n      Screen.global = null;\n\n      process.removeListener('uncaughtException', Screen._exceptionHandler);\n      process.removeListener('SIGTERM', Screen._sigtermHandler);\n      process.removeListener('SIGINT', Screen._sigintHandler);\n      process.removeListener('SIGQUIT', Screen._sigquitHandler);\n      process.removeListener('exit', Screen._exitHandler);\n      delete Screen._exceptionHandler;\n      delete Screen._sigtermHandler;\n      delete Screen._sigintHandler;\n      delete Screen._sigquitHandler;\n      delete Screen._exitHandler;\n\n      delete Screen._bound;\n    }\n\n    this.destroyed = true;\n    this.emit('destroy');\n    this._destroy();\n  }\n\n  if (this.program && this.program.destroy) {\n    this.program.destroy();\n  }\n};\n\nScreen.prototype.log = function (this: ScreenInterface, ...args: any[]): void {\n  return this.program.log.apply(this.program, arguments);\n};\n\nScreen.prototype.debug = function (\n  this: ScreenInterface,\n  ...args: any[]\n): void {\n  if (this.debugLog) {\n    this.debugLog.log.apply(this.debugLog, arguments);\n  }\n  return this.program.debug.apply(this.program, arguments);\n};\n\nScreen.prototype._listenMouse = function (el) {\n  var self = this;\n\n  if (el && !~this.clickable.indexOf(el)) {\n    el.clickable = true;\n    this.clickable.push(el);\n  }\n\n  if (this._listenedMouse) return;\n  this._listenedMouse = true;\n\n  this.program.enableMouse();\n  if (this.options.sendFocus) {\n    this.program.setMouse({ sendFocus: true }, true);\n  }\n\n  this.on('render', function () {\n    self._needsClickableSort = true;\n  });\n\n  this.program.on('mouse', function (data) {\n    if (self.lockKeys) return;\n\n    if (self._needsClickableSort) {\n      self.clickable = helpers.hsort(self.clickable);\n      self._needsClickableSort = false;\n    }\n\n    var i = 0,\n      el,\n      set,\n      pos;\n\n    for (; i < self.clickable.length; i++) {\n      el = self.clickable[i];\n\n      if (el.detached || !el.visible) {\n        continue;\n      }\n\n      // if (self.grabMouse && self.focused !== el\n      //     && !el.hasAncestor(self.focused)) continue;\n\n      pos = el.lpos;\n      if (!pos) continue;\n\n      if (\n        data.x >= pos.xi &&\n        data.x < pos.xl &&\n        data.y >= pos.yi &&\n        data.y < pos.yl\n      ) {\n        el.emit('mouse', data);\n        if (data.action === 'mousedown') {\n          self.mouseDown = el;\n        } else if (data.action === 'mouseup') {\n          (self.mouseDown || el).emit('click', data);\n          self.mouseDown = null;\n        } else if (data.action === 'mousemove') {\n          if (self.hover && el.index > self.hover.index) {\n            set = false;\n          }\n          if (self.hover !== el && !set) {\n            if (self.hover) {\n              self.hover.emit('mouseout', data);\n            }\n            el.emit('mouseover', data);\n            self.hover = el;\n          }\n          set = true;\n        }\n        el.emit(data.action, data);\n        break;\n      }\n    }\n\n    // Just mouseover?\n    if (\n      (data.action === 'mousemove' ||\n        data.action === 'mousedown' ||\n        data.action === 'mouseup') &&\n      self.hover &&\n      !set\n    ) {\n      self.hover.emit('mouseout', data);\n      self.hover = null;\n    }\n\n    self.emit('mouse', data);\n    self.emit(data.action, data);\n  });\n\n  // Autofocus highest element.\n  // this.on('element click', function(el, data) {\n  //   var target;\n  //   do {\n  //     if (el.clickable === true && el.options.autoFocus !== false) {\n  //       target = el;\n  //     }\n  //   } while (el = el.parent);\n  //   if (target) target.focus();\n  // });\n\n  // Autofocus elements with the appropriate option.\n  this.on('element click', function (el) {\n    if (el.clickable === true && el.options.autoFocus !== false) {\n      el.focus();\n    }\n  });\n};\n\nScreen.prototype.enableMouse = function (\n  this: ScreenInterface,\n  el?: any\n): void {\n  this._listenMouse(el);\n};\n\nScreen.prototype._listenKeys = function (el) {\n  var self = this;\n\n  if (el && !~this.keyable.indexOf(el)) {\n    el.keyable = true;\n    this.keyable.push(el);\n  }\n\n  if (this._listenedKeys) return;\n  this._listenedKeys = true;\n\n  // NOTE: The event emissions used to be reversed:\n  // element + screen\n  // They are now:\n  // screen + element\n  // After the first keypress emitted, the handler\n  // checks to make sure grabKeys, lockKeys, and focused\n  // weren't changed, and handles those situations appropriately.\n  this.program.on('keypress', function (ch, key) {\n    if (self.lockKeys && !~self.ignoreLocked.indexOf(key.full)) {\n      return;\n    }\n\n    var focused = self.focused,\n      grabKeys = self.grabKeys;\n\n    if (!grabKeys || ~self.ignoreLocked.indexOf(key.full)) {\n      self.emit('keypress', ch, key);\n      self.emit('key ' + key.full, ch, key);\n    }\n\n    // If something changed from the screen key handler, stop.\n    if (self.grabKeys !== grabKeys || self.lockKeys) {\n      return;\n    }\n\n    if (focused && focused.keyable) {\n      focused.emit('keypress', ch, key);\n      focused.emit('key ' + key.full, ch, key);\n    }\n  });\n};\n\nScreen.prototype.enableKeys = function (this: ScreenInterface, el?: any): void {\n  this._listenKeys(el);\n};\n\nScreen.prototype.enableInput = function (\n  this: ScreenInterface,\n  el?: any\n): void {\n  this._listenMouse(el);\n  this._listenKeys(el);\n};\n\nScreen.prototype._initHover = function () {\n  var self = this;\n\n  if (this._hoverText) {\n    return;\n  }\n\n  this._hoverText = new Box({\n    screen: this,\n    left: 0,\n    top: 0,\n    tags: false,\n    height: 'shrink',\n    width: 'shrink',\n    border: 'line',\n    style: {\n      border: {\n        fg: 'default',\n      },\n      bg: 'default',\n      fg: 'default',\n    },\n  });\n\n  this.on('mousemove', function (data) {\n    if (self._hoverText.detached) return;\n    self._hoverText.rleft = data.x + 1;\n    self._hoverText.rtop = data.y;\n    self.render();\n  });\n\n  this.on('element mouseover', function (el, data) {\n    if (!el._hoverOptions) return;\n    self._hoverText.parseTags = el.parseTags;\n    self._hoverText.setContent(el._hoverOptions.text);\n    self.append(self._hoverText);\n    self._hoverText.rleft = data.x + 1;\n    self._hoverText.rtop = data.y;\n    self.render();\n  });\n\n  this.on('element mouseout', function () {\n    if (self._hoverText.detached) return;\n    self._hoverText.detach();\n    self.render();\n  });\n\n  // XXX This can cause problems if the\n  // terminal does not support allMotion.\n  // Workaround: check to see if content is set.\n  this.on('element mouseup', function (el) {\n    if (!self._hoverText.getContent()) return;\n    if (!el._hoverOptions) return;\n    self.append(self._hoverText);\n    self.render();\n  });\n};\n\nScreen.prototype.__defineGetter__('cols', function () {\n  return this.program.cols;\n});\n\nScreen.prototype.__defineGetter__('rows', function () {\n  return this.program.rows;\n});\n\nScreen.prototype.__defineGetter__('width', function () {\n  return this.program.cols;\n});\n\nScreen.prototype.__defineGetter__('height', function () {\n  return this.program.rows;\n});\n\nScreen.prototype.alloc = function (dirty) {\n  var x, y;\n\n  this.lines = [];\n  for (y = 0; y < this.rows; y++) {\n    this.lines[y] = [];\n    for (x = 0; x < this.cols; x++) {\n      this.lines[y][x] = [this.dattr, ' '];\n    }\n    this.lines[y].dirty = !!dirty;\n  }\n\n  this.olines = [];\n  for (y = 0; y < this.rows; y++) {\n    this.olines[y] = [];\n    for (x = 0; x < this.cols; x++) {\n      this.olines[y][x] = [this.dattr, ' '];\n    }\n  }\n\n  this.program.clear();\n};\n\nScreen.prototype.realloc = function () {\n  return this.alloc(true);\n};\n\nScreen.prototype.render = function () {\n  var self = this;\n\n  if (this.destroyed) return;\n\n  this.emit('prerender');\n\n  this._borderStops = {};\n\n  // TODO: Possibly get rid of .dirty altogether.\n  // TODO: Could possibly drop .dirty and just clear the `lines` buffer every\n  // time before a screen.render. This way clearRegion doesn't have to be\n  // called in arbitrary places for the sake of clearing a spot where an\n  // element used to be (e.g. when an element moves or is hidden). There could\n  // be some overhead though.\n  // this.screen.clearRegion(0, this.cols, 0, this.rows);\n  this._ci = 0;\n  this.children.forEach(function (el) {\n    el.index = self._ci++;\n    //el._rendering = true;\n    el.render();\n    //el._rendering = false;\n  });\n  this._ci = -1;\n\n  if (this.screen.dockBorders) {\n    this._dockBorders();\n  }\n\n  this.draw(0, this.lines.length - 1);\n\n  // XXX Workaround to deal with cursor pos before the screen has rendered and\n  // lpos is not reliable (stale).\n  if (this.focused && this.focused._updateCursor) {\n    this.focused._updateCursor(true);\n  }\n\n  this.renders++;\n\n  this.emit('render');\n};\n\nScreen.prototype.blankLine = function (ch, dirty) {\n  var out = [];\n  for (var x = 0; x < this.cols; x++) {\n    out[x] = [this.dattr, ch || ' '];\n  }\n  out.dirty = dirty;\n  return out;\n};\n\nScreen.prototype.insertLine = function (n, y, top, bottom) {\n  // if (y === top) return this.insertLineNC(n, y, top, bottom);\n\n  if (\n    !this.tput.strings.change_scroll_region ||\n    !this.tput.strings.delete_line ||\n    !this.tput.strings.insert_line\n  )\n    return;\n\n  this._buf += this.tput.csr(top, bottom);\n  this._buf += this.tput.cup(y, 0);\n  this._buf += this.tput.il(n);\n  this._buf += this.tput.csr(0, this.height - 1);\n\n  var j = bottom + 1;\n\n  while (n--) {\n    this.lines.splice(y, 0, this.blankLine());\n    this.lines.splice(j, 1);\n    this.olines.splice(y, 0, this.blankLine());\n    this.olines.splice(j, 1);\n  }\n};\n\nScreen.prototype.deleteLine = function (n, y, top, bottom) {\n  // if (y === top) return this.deleteLineNC(n, y, top, bottom);\n\n  if (\n    !this.tput.strings.change_scroll_region ||\n    !this.tput.strings.delete_line ||\n    !this.tput.strings.insert_line\n  )\n    return;\n\n  this._buf += this.tput.csr(top, bottom);\n  this._buf += this.tput.cup(y, 0);\n  this._buf += this.tput.dl(n);\n  this._buf += this.tput.csr(0, this.height - 1);\n\n  var j = bottom + 1;\n\n  while (n--) {\n    this.lines.splice(j, 0, this.blankLine());\n    this.lines.splice(y, 1);\n    this.olines.splice(j, 0, this.blankLine());\n    this.olines.splice(y, 1);\n  }\n};\n\n// This is how ncurses does it.\n// Scroll down (up cursor-wise).\n// This will only work for top line deletion as opposed to arbitrary lines.\nScreen.prototype.insertLineNC = function (n, y, top, bottom) {\n  if (!this.tput.strings.change_scroll_region || !this.tput.strings.delete_line)\n    return;\n\n  this._buf += this.tput.csr(top, bottom);\n  this._buf += this.tput.cup(top, 0);\n  this._buf += this.tput.dl(n);\n  this._buf += this.tput.csr(0, this.height - 1);\n\n  var j = bottom + 1;\n\n  while (n--) {\n    this.lines.splice(j, 0, this.blankLine());\n    this.lines.splice(y, 1);\n    this.olines.splice(j, 0, this.blankLine());\n    this.olines.splice(y, 1);\n  }\n};\n\n// This is how ncurses does it.\n// Scroll up (down cursor-wise).\n// This will only work for bottom line deletion as opposed to arbitrary lines.\nScreen.prototype.deleteLineNC = function (n, y, top, bottom) {\n  if (!this.tput.strings.change_scroll_region || !this.tput.strings.delete_line)\n    return;\n\n  this._buf += this.tput.csr(top, bottom);\n  this._buf += this.tput.cup(bottom, 0);\n  this._buf += Array(n + 1).join('\\n');\n  this._buf += this.tput.csr(0, this.height - 1);\n\n  var j = bottom + 1;\n\n  while (n--) {\n    this.lines.splice(j, 0, this.blankLine());\n    this.lines.splice(y, 1);\n    this.olines.splice(j, 0, this.blankLine());\n    this.olines.splice(y, 1);\n  }\n};\n\nScreen.prototype.insertBottom = function (top, bottom) {\n  return this.deleteLine(1, top, top, bottom);\n};\n\nScreen.prototype.insertTop = function (top, bottom) {\n  return this.insertLine(1, top, top, bottom);\n};\n\nScreen.prototype.deleteBottom = function (top, bottom) {\n  return this.clearRegion(0, this.width, bottom, bottom);\n};\n\nScreen.prototype.deleteTop = function (top, bottom) {\n  // Same as: return this.insertBottom(top, bottom);\n  return this.deleteLine(1, top, top, bottom);\n};\n\n// Parse the sides of an element to determine\n// whether an element has uniform cells on\n// both sides. If it does, we can use CSR to\n// optimize scrolling on a scrollable element.\n// Not exactly sure how worthwile this is.\n// This will cause a performance/cpu-usage hit,\n// but will it be less or greater than the\n// performance hit of slow-rendering scrollable\n// boxes with clean sides?\nScreen.prototype.cleanSides = function (el) {\n  var pos = el.lpos;\n\n  if (!pos) {\n    return false;\n  }\n\n  if (pos._cleanSides != null) {\n    return pos._cleanSides;\n  }\n\n  if (pos.xi <= 0 && pos.xl >= this.width) {\n    return (pos._cleanSides = true);\n  }\n\n  if (this.options.fastCSR) {\n    // Maybe just do this instead of parsing.\n    if (pos.yi < 0) return (pos._cleanSides = false);\n    if (pos.yl > this.height) return (pos._cleanSides = false);\n    if (this.width - (pos.xl - pos.xi) < 40) {\n      return (pos._cleanSides = true);\n    }\n    return (pos._cleanSides = false);\n  }\n\n  if (!this.options.smartCSR) {\n    return false;\n  }\n\n  // The scrollbar can't update properly, and there's also a\n  // chance that the scrollbar may get moved around senselessly.\n  // NOTE: In pratice, this doesn't seem to be the case.\n  // if (this.scrollbar) {\n  //   return pos._cleanSides = false;\n  // }\n\n  // Doesn't matter if we're only a height of 1.\n  // if ((pos.yl - el.ibottom) - (pos.yi + el.itop) <= 1) {\n  //   return pos._cleanSides = false;\n  // }\n\n  var yi = pos.yi + el.itop,\n    yl = pos.yl - el.ibottom,\n    first,\n    ch,\n    x,\n    y;\n\n  if (pos.yi < 0) return (pos._cleanSides = false);\n  if (pos.yl > this.height) return (pos._cleanSides = false);\n  if (pos.xi - 1 < 0) return (pos._cleanSides = true);\n  if (pos.xl > this.width) return (pos._cleanSides = true);\n\n  for (x = pos.xi - 1; x >= 0; x--) {\n    if (!this.olines[yi]) break;\n    first = this.olines[yi][x];\n    for (y = yi; y < yl; y++) {\n      if (!this.olines[y] || !this.olines[y][x]) break;\n      ch = this.olines[y][x];\n      if (ch[0] !== first[0] || ch[1] !== first[1]) {\n        return (pos._cleanSides = false);\n      }\n    }\n  }\n\n  for (x = pos.xl; x < this.width; x++) {\n    if (!this.olines[yi]) break;\n    first = this.olines[yi][x];\n    for (y = yi; y < yl; y++) {\n      if (!this.olines[y] || !this.olines[y][x]) break;\n      ch = this.olines[y][x];\n      if (ch[0] !== first[0] || ch[1] !== first[1]) {\n        return (pos._cleanSides = false);\n      }\n    }\n  }\n\n  return (pos._cleanSides = true);\n};\n\nScreen.prototype._dockBorders = function () {\n  var lines = this.lines,\n    stops = this._borderStops,\n    i,\n    y,\n    x,\n    ch;\n\n  // var keys, stop;\n  //\n  // keys = Object.keys(this._borderStops)\n  //   .map(function(k) { return +k; })\n  //   .sort(function(a, b) { return a - b; });\n  //\n  // for (i = 0; i < keys.length; i++) {\n  //   y = keys[i];\n  //   if (!lines[y]) continue;\n  //   stop = this._borderStops[y];\n  //   for (x = stop.xi; x < stop.xl; x++) {\n\n  stops = Object.keys(stops)\n    .map(function (k) {\n      return +k;\n    })\n    .sort(function (a, b) {\n      return a - b;\n    });\n\n  for (i = 0; i < stops.length; i++) {\n    y = stops[i];\n    if (!lines[y]) continue;\n    for (x = 0; x < this.width; x++) {\n      ch = lines[y][x][1];\n      if (angles[ch]) {\n        lines[y][x][1] = this._getAngle(lines, x, y);\n        lines[y].dirty = true;\n      }\n    }\n  }\n};\n\nScreen.prototype._getAngle = function (lines, x, y) {\n  var angle = 0,\n    attr = lines[y][x][0],\n    ch = lines[y][x][1];\n\n  if (lines[y][x - 1] && langles[lines[y][x - 1][1]]) {\n    if (!this.options.ignoreDockContrast) {\n      if (lines[y][x - 1][0] !== attr) return ch;\n    }\n    angle |= 1 << 3;\n  }\n\n  if (lines[y - 1] && uangles[lines[y - 1][x][1]]) {\n    if (!this.options.ignoreDockContrast) {\n      if (lines[y - 1][x][0] !== attr) return ch;\n    }\n    angle |= 1 << 2;\n  }\n\n  if (lines[y][x + 1] && rangles[lines[y][x + 1][1]]) {\n    if (!this.options.ignoreDockContrast) {\n      if (lines[y][x + 1][0] !== attr) return ch;\n    }\n    angle |= 1 << 1;\n  }\n\n  if (lines[y + 1] && dangles[lines[y + 1][x][1]]) {\n    if (!this.options.ignoreDockContrast) {\n      if (lines[y + 1][x][0] !== attr) return ch;\n    }\n    angle |= 1 << 0;\n  }\n\n  // Experimental: fixes this situation:\n  // +----------+\n  //            | <-- empty space here, should be a T angle\n  // +-------+  |\n  // |       |  |\n  // +-------+  |\n  // |          |\n  // +----------+\n  // if (uangles[lines[y][x][1]]) {\n  //   if (lines[y + 1] && cdangles[lines[y + 1][x][1]]) {\n  //     if (!this.options.ignoreDockContrast) {\n  //       if (lines[y + 1][x][0] !== attr) return ch;\n  //     }\n  //     angle |= 1 << 0;\n  //   }\n  // }\n\n  return angleTable[angle] || ch;\n};\n\nScreen.prototype.draw = function (start, end) {\n  // this.emit('predraw');\n\n  var x, y, line, out, ch, data, attr, fg, bg, flags;\n\n  var main = '',\n    pre,\n    post;\n\n  var clr, neq, xx;\n\n  var lx = -1,\n    ly = -1,\n    o;\n\n  var acs;\n\n  if (this._buf) {\n    main += this._buf;\n    this._buf = '';\n  }\n\n  for (y = start; y <= end; y++) {\n    line = this.lines[y];\n    o = this.olines[y];\n\n    if (!line.dirty && !(this.cursor.artificial && y === this.program.y)) {\n      continue;\n    }\n    line.dirty = false;\n\n    out = '';\n    attr = this.dattr;\n\n    for (x = 0; x < line.length; x++) {\n      data = line[x][0];\n      ch = line[x][1];\n\n      // Render the artificial cursor.\n      if (\n        this.cursor.artificial &&\n        !this.cursor._hidden &&\n        this.cursor._state &&\n        x === this.program.x &&\n        y === this.program.y\n      ) {\n        var cattr = this._cursorAttr(this.cursor, data);\n        if (cattr.ch) ch = cattr.ch;\n        data = cattr.attr;\n      }\n\n      // Take advantage of xterm's back_color_erase feature by using a\n      // lookahead. Stop spitting out so many damn spaces. NOTE: Is checking\n      // the bg for non BCE terminals worth the overhead?\n      if (\n        this.options.useBCE &&\n        ch === ' ' &&\n        (this.tput.bools.back_color_erase ||\n          (data & 0xffffff) === (this.dattr & 0xffffff)) &&\n        ((data >> 48) & 8) === ((this.dattr >> 48) & 8)\n      ) {\n        clr = true;\n        neq = false;\n\n        for (xx = x; xx < line.length; xx++) {\n          if (line[xx][0] !== data || line[xx][1] !== ' ') {\n            clr = false;\n            break;\n          }\n          if (line[xx][0] !== o[xx][0] || line[xx][1] !== o[xx][1]) {\n            neq = true;\n          }\n        }\n\n        if (clr && neq) {\n          (lx = -1), (ly = -1);\n          if (data !== attr) {\n            out += this.codeAttr(data);\n            attr = data;\n          }\n          out += this.tput.cup(y, x);\n          out += this.tput.el();\n          for (xx = x; xx < line.length; xx++) {\n            o[xx][0] = data;\n            o[xx][1] = ' ';\n          }\n          break;\n        }\n\n        // If there's more than 10 spaces, use EL regardless\n        // and start over drawing the rest of line. Might\n        // not be worth it. Try to use ECH if the terminal\n        // supports it. Maybe only try to use ECH here.\n        // //if (this.tput.strings.erase_chars)\n        // if (!clr && neq && (xx - x) > 10) {\n        //   lx = -1, ly = -1;\n        //   if (data !== attr) {\n        //     out += this.codeAttr(data);\n        //     attr = data;\n        //   }\n        //   out += this.tput.cup(y, x);\n        //   if (this.tput.strings.erase_chars) {\n        //     // Use erase_chars to avoid erasing the whole line.\n        //     out += this.tput.ech(xx - x);\n        //   } else {\n        //     out += this.tput.el();\n        //   }\n        //   if (this.tput.strings.parm_right_cursor) {\n        //     out += this.tput.cuf(xx - x);\n        //   } else {\n        //     out += this.tput.cup(y, xx);\n        //   }\n        //   this.fillRegion(data, ' ',\n        //     x, this.tput.strings.erase_chars ? xx : line.length,\n        //     y, y + 1);\n        //   x = xx - 1;\n        //   continue;\n        // }\n\n        // Skip to the next line if the\n        // rest of the line is already drawn.\n        // if (!neq) {\n        //   for (; xx < line.length; xx++) {\n        //     if (line[xx][0] !== o[xx][0] || line[xx][1] !== o[xx][1]) {\n        //       neq = true;\n        //       break;\n        //     }\n        //   }\n        //   if (!neq) {\n        //     attr = data;\n        //     break;\n        //   }\n        // }\n      }\n\n      // Optimize by comparing the real output\n      // buffer to the pending output buffer.\n      if (data === o[x][0] && ch === o[x][1]) {\n        if (lx === -1) {\n          lx = x;\n          ly = y;\n        }\n        continue;\n      } else if (lx !== -1) {\n        if (this.tput.strings.parm_right_cursor) {\n          out += y === ly ? this.tput.cuf(x - lx) : this.tput.cup(y, x);\n        } else {\n          out += this.tput.cup(y, x);\n        }\n        (lx = -1), (ly = -1);\n      }\n      o[x][0] = data;\n      o[x][1] = ch;\n\n      if (data !== attr) {\n        if (attr !== this.dattr) {\n          out += '\\x1b[m';\n        }\n        if (data !== this.dattr) {\n          out += '\\x1b[';\n\n          // Extract 24-bit colors and flags from new format\n          // Use Math operations for values beyond 32-bit\n          bg = data & 0xffffff;\n          fg = Math.floor(data / 0x1000000) & 0xffffff;\n          flags = Math.floor(data / 0x1000000000000); // 2^48\n\n          // bold\n          if (flags & 1) {\n            out += '1;';\n          }\n\n          // underline\n          if (flags & 2) {\n            out += '4;';\n          }\n\n          // blink\n          if (flags & 4) {\n            out += '5;';\n          }\n\n          // inverse\n          if (flags & 8) {\n            out += '7;';\n          }\n\n          // invisible\n          if (flags & 16) {\n            out += '8;';\n          }\n\n          // Handle background color\n          if (bg !== 0xffffff) {\n            if (bg <= 255) {\n              // Legacy 256-color mode\n              bg = this._reduceColor(bg);\n              if (bg < 16) {\n                if (bg < 8) {\n                  bg += 40;\n                } else if (bg < 16) {\n                  bg -= 8;\n                  bg += 100;\n                }\n                out += bg + ';';\n              } else {\n                out += '48;5;' + bg + ';';\n              }\n            } else {\n              // 24-bit RGB color\n              const r = (bg >> 16) & 0xff;\n              const g = (bg >> 8) & 0xff;\n              const b = bg & 0xff;\n              out += `48;2;${r};${g};${b};`;\n            }\n          }\n\n          // Handle foreground color\n          if (fg !== 0xffffff) {\n            if (fg <= 255) {\n              // Legacy 256-color mode\n              fg = this._reduceColor(fg);\n              if (fg < 16) {\n                if (fg < 8) {\n                  fg += 30;\n                } else if (fg < 16) {\n                  fg -= 8;\n                  fg += 90;\n                }\n                out += fg + ';';\n              } else {\n                out += '38;5;' + fg + ';';\n              }\n            } else {\n              // 24-bit RGB color\n              const r = (fg >> 16) & 0xff;\n              const g = (fg >> 8) & 0xff;\n              const b = fg & 0xff;\n              out += `38;2;${r};${g};${b};`;\n            }\n          }\n\n          if (out[out.length - 1] === ';') out = out.slice(0, -1);\n\n          out += 'm';\n        }\n      }\n\n      // If we find a double-width char, eat the next character which should be\n      // a space due to parseContent's behavior.\n      if (this.fullUnicode) {\n        // If this is a surrogate pair double-width char, we can ignore it\n        // because parseContent already counted it as length=2.\n        if (unicode.charWidth(line[x][1]) === 2) {\n          // NOTE: At cols=44, the bug that is avoided\n          // by the angles check occurs in widget-unicode:\n          // Might also need: `line[x + 1][0] !== line[x][0]`\n          // for borderless boxes?\n          if (x === line.length - 1 || angles[line[x + 1][1]]) {\n            // If we're at the end, we don't have enough space for a\n            // double-width. Overwrite it with a space and ignore.\n            ch = ' ';\n            o[x][1] = '\\0';\n          } else {\n            // ALWAYS refresh double-width chars because this special cursor\n            // behavior is needed. There may be a more efficient way of doing\n            // this. See above.\n            o[x][1] = '\\0';\n            // Eat the next character by moving forward and marking as a\n            // space (which it is).\n            o[++x][1] = '\\0';\n          }\n        }\n      }\n\n      // Attempt to use ACS for supported characters.\n      // This is not ideal, but it's how ncurses works.\n      // There are a lot of terminals that support ACS\n      // *and UTF8, but do not declare U8. So ACS ends\n      // up being used (slower than utf8). Terminals\n      // that do not support ACS and do not explicitly\n      // support UTF8 get their unicode characters\n      // replaced with really ugly ascii characters.\n      // It is possible there is a terminal out there\n      // somewhere that does not support ACS, but\n      // supports UTF8, but I imagine it's unlikely.\n      // Maybe remove !this.tput.unicode check, however,\n      // this seems to be the way ncurses does it.\n      if (\n        this.tput.strings.enter_alt_charset_mode &&\n        !this.tput.brokenACS &&\n        (this.tput.acscr[ch] || acs)\n      ) {\n        // Fun fact: even if this.tput.brokenACS wasn't checked here,\n        // the linux console would still work fine because the acs\n        // table would fail the check of: this.tput.acscr[ch]\n        if (this.tput.acscr[ch]) {\n          if (acs) {\n            ch = this.tput.acscr[ch];\n          } else {\n            ch = this.tput.smacs() + this.tput.acscr[ch];\n            acs = true;\n          }\n        } else if (acs) {\n          ch = this.tput.rmacs() + ch;\n          acs = false;\n        }\n      } else {\n        // U8 is not consistently correct. Some terminfo's\n        // terminals that do not declare it may actually\n        // support utf8 (e.g. urxvt), but if the terminal\n        // does not declare support for ACS (and U8), chances\n        // are it does not support UTF8. This is probably\n        // the \"safest\" way to do this. Should fix things\n        // like sun-color.\n        // NOTE: It could be the case that the $LANG\n        // is all that matters in some cases:\n        // if (!this.tput.unicode && ch > '~') {\n        if (!this.tput.unicode && this.tput.numbers.U8 !== 1 && ch > '~') {\n          ch = this.tput.utoa[ch] || '?';\n        }\n      }\n\n      out += ch;\n      attr = data;\n    }\n\n    if (attr !== this.dattr) {\n      out += '\\x1b[m';\n    }\n\n    if (out) {\n      main += this.tput.cup(y, 0) + out;\n    }\n  }\n\n  if (acs) {\n    main += this.tput.rmacs();\n    acs = false;\n  }\n\n  if (main) {\n    pre = '';\n    post = '';\n\n    pre += this.tput.sc();\n    post += this.tput.rc();\n\n    if (!this.program.cursorHidden) {\n      pre += this.tput.civis();\n      post += this.tput.cnorm();\n    }\n\n    // this.program.flush();\n    // this.program._owrite(pre + main + post);\n    this.program._write(pre + main + post);\n  }\n\n  // this.emit('draw');\n};\n\nScreen.prototype._reduceColor = function (color) {\n  return colors.reduce(color, this.tput.colors);\n};\n\n// Convert an SGR string to our own attribute format.\nScreen.prototype.attrCode = function (code, cur, def) {\n  // Extract from new 24-bit format using Math for high bits\n  var flags = Math.floor(cur / 0x1000000000000) & 0x1f,\n    fg = Math.floor(cur / 0x1000000) & 0xffffff,\n    bg = cur & 0xffffff,\n    c,\n    i;\n\n  code = code.slice(2, -1).split(';');\n  if (!code[0]) code[0] = '0';\n\n  for (i = 0; i < code.length; i++) {\n    c = +code[i] || 0;\n    switch (c) {\n      case 0: // normal\n        bg = def & 0xffffff;\n        fg = Math.floor(def / 0x1000000) & 0xffffff;\n        flags = Math.floor(def / 0x1000000000000) & 0x1f;\n        break;\n      case 1: // bold\n        flags |= 1;\n        break;\n      case 22:\n        flags = Math.floor(def / 0x1000000000000) & 0x1f;\n        break;\n      case 4: // underline\n        flags |= 2;\n        break;\n      case 24:\n        flags = Math.floor(def / 0x1000000000000) & 0x1f;\n        break;\n      case 5: // blink\n        flags |= 4;\n        break;\n      case 25:\n        flags = Math.floor(def / 0x1000000000000) & 0x1f;\n        break;\n      case 7: // inverse\n        flags |= 8;\n        break;\n      case 27:\n        flags = Math.floor(def / 0x1000000000000) & 0x1f;\n        break;\n      case 8: // invisible\n        flags |= 16;\n        break;\n      case 28:\n        flags = Math.floor(def / 0x1000000000000) & 0x1f;\n        break;\n      case 39: // default fg\n        fg = Math.floor(def / 0x1000000) & 0xffffff;\n        break;\n      case 49: // default bg\n        bg = def & 0xffffff;\n        break;\n      case 100: // default fg/bg\n        fg = Math.floor(def / 0x1000000) & 0xffffff;\n        bg = def & 0xffffff;\n        break;\n      default: // color\n        if (c === 48 && +code[i + 1] === 5) {\n          i += 2;\n          bg = +code[i];\n          break;\n        } else if (c === 48 && +code[i + 1] === 2) {\n          // 24-bit RGB background\n          i += 2;\n          const r = +code[i];\n          const g = +code[i + 1];\n          const b = +code[i + 2];\n          bg = (r << 16) | (g << 8) | b;\n          i += 2;\n          break;\n        } else if (c === 38 && +code[i + 1] === 5) {\n          i += 2;\n          fg = +code[i];\n          break;\n        } else if (c === 38 && +code[i + 1] === 2) {\n          // 24-bit RGB foreground\n          i += 2;\n          const r = +code[i];\n          const g = +code[i + 1];\n          const b = +code[i + 2];\n          fg = (r << 16) | (g << 8) | b;\n          i += 2;\n          break;\n        }\n        if (c >= 40 && c <= 47) {\n          bg = c - 40;\n        } else if (c >= 100 && c <= 107) {\n          bg = c - 100;\n          bg += 8;\n        } else if (c === 49) {\n          bg = def & 0xffffff;\n        } else if (c >= 30 && c <= 37) {\n          fg = c - 30;\n        } else if (c >= 90 && c <= 97) {\n          fg = c - 90;\n          fg += 8;\n        } else if (c === 39) {\n          fg = Math.floor(def / 0x1000000) & 0xffffff;\n        } else if (c === 100) {\n          fg = Math.floor(def / 0x1000000) & 0xffffff;\n          bg = def & 0xffffff;\n        }\n        break;\n    }\n  }\n\n  return bg + fg * 0x1000000 + flags * 0x1000000000000;\n};\n\n// Convert our own attribute format to an SGR string.\nScreen.prototype.codeAttr = function (code) {\n  var flags = Math.floor(code / 0x1000000000000) & 0x1f,\n    fg = Math.floor(code / 0x1000000) & 0xffffff,\n    bg = code & 0xffffff,\n    out = '';\n\n  // bold\n  if (flags & 1) {\n    out += '1;';\n  }\n\n  // underline\n  if (flags & 2) {\n    out += '4;';\n  }\n\n  // blink\n  if (flags & 4) {\n    out += '5;';\n  }\n\n  // inverse\n  if (flags & 8) {\n    out += '7;';\n  }\n\n  // invisible\n  if (flags & 16) {\n    out += '8;';\n  }\n\n  // Handle background color\n  if (bg !== 0xffffff) {\n    if (bg <= 255) {\n      // Legacy 256-color mode\n      bg = this._reduceColor(bg);\n      if (bg < 16) {\n        if (bg < 8) {\n          bg += 40;\n        } else if (bg < 16) {\n          bg -= 8;\n          bg += 100;\n        }\n        out += bg + ';';\n      } else {\n        out += '48;5;' + bg + ';';\n      }\n    } else {\n      // 24-bit RGB color\n      const r = (bg >> 16) & 0xff;\n      const g = (bg >> 8) & 0xff;\n      const b = bg & 0xff;\n      out += `48;2;${r};${g};${b};`;\n    }\n  }\n\n  // Handle foreground color\n  if (fg !== 0xffffff) {\n    if (fg <= 255) {\n      // Legacy 256-color mode\n      fg = this._reduceColor(fg);\n      if (fg < 16) {\n        if (fg < 8) {\n          fg += 30;\n        } else if (fg < 16) {\n          fg -= 8;\n          fg += 90;\n        }\n        out += fg + ';';\n      } else {\n        out += '38;5;' + fg + ';';\n      }\n    } else {\n      // 24-bit RGB color\n      const r = (fg >> 16) & 0xff;\n      const g = (fg >> 8) & 0xff;\n      const b = fg & 0xff;\n      out += `38;2;${r};${g};${b};`;\n    }\n  }\n\n  if (out[out.length - 1] === ';') out = out.slice(0, -1);\n\n  return '\\x1b[' + out + 'm';\n};\n\nScreen.prototype.focusOffset = function (offset) {\n  var shown = this.keyable.filter(function (el) {\n    return !el.detached && el.visible;\n  }).length;\n\n  if (!shown || !offset) {\n    return;\n  }\n\n  var i = this.keyable.indexOf(this.focused);\n  if (!~i) return;\n\n  if (offset > 0) {\n    while (offset--) {\n      if (++i > this.keyable.length - 1) i = 0;\n      if (this.keyable[i].detached || !this.keyable[i].visible) offset++;\n    }\n  } else {\n    offset = -offset;\n    while (offset--) {\n      if (--i < 0) i = this.keyable.length - 1;\n      if (this.keyable[i].detached || !this.keyable[i].visible) offset++;\n    }\n  }\n\n  return this.keyable[i].focus();\n};\n\nScreen.prototype.focusPrev = Screen.prototype.focusPrevious = function () {\n  return this.focusOffset(-1);\n};\n\nScreen.prototype.focusNext = function () {\n  return this.focusOffset(1);\n};\n\nScreen.prototype.focusPush = function (el) {\n  if (!el) return;\n  var old = this.history[this.history.length - 1];\n  if (this.history.length === 10) {\n    this.history.shift();\n  }\n  this.history.push(el);\n  this._focus(el, old);\n};\n\nScreen.prototype.focusPop = function () {\n  var old = this.history.pop();\n  if (this.history.length) {\n    this._focus(this.history[this.history.length - 1], old);\n  }\n  return old;\n};\n\nScreen.prototype.saveFocus = function () {\n  return (this._savedFocus = this.focused);\n};\n\nScreen.prototype.restoreFocus = function () {\n  if (!this._savedFocus) return;\n  this._savedFocus.focus();\n  delete this._savedFocus;\n  return this.focused;\n};\n\nScreen.prototype.rewindFocus = function () {\n  var old = this.history.pop(),\n    el;\n\n  while (this.history.length) {\n    el = this.history.pop();\n    if (!el.detached && el.visible) {\n      this.history.push(el);\n      this._focus(el, old);\n      return el;\n    }\n  }\n\n  if (old) {\n    old.emit('blur');\n  }\n};\n\nScreen.prototype._focus = function (self, old) {\n  // Find a scrollable ancestor if we have one.\n  var el = self;\n  while ((el = el.parent)) {\n    if (el.scrollable) break;\n  }\n\n  // If we're in a scrollable element,\n  // automatically scroll to the focused element.\n  if (el && !el.detached) {\n    // NOTE: This is different from the other \"visible\" values - it needs the\n    // visible height of the scrolling element itself, not the element within\n    // it.\n    var visible =\n      self.screen.height - el.atop - el.itop - el.abottom - el.ibottom;\n    if (self.rtop < el.childBase) {\n      el.scrollTo(self.rtop);\n      self.screen.render();\n    } else if (\n      self.rtop + self.height - self.ibottom >\n      el.childBase + visible\n    ) {\n      // Explanation for el.itop here: takes into account scrollable elements\n      // with borders otherwise the element gets covered by the bottom border:\n      el.scrollTo(self.rtop - (el.height - self.height) + el.itop, true);\n      self.screen.render();\n    }\n  }\n\n  if (old) {\n    old.emit('blur', self);\n  }\n\n  self.emit('focus', old);\n};\n\nScreen.prototype.__defineGetter__('focused', function () {\n  return this.history[this.history.length - 1];\n});\n\nScreen.prototype.__defineSetter__('focused', function (el) {\n  return this.focusPush(el);\n});\n\nScreen.prototype.clearRegion = function (xi, xl, yi, yl, override) {\n  return this.fillRegion(this.dattr, ' ', xi, xl, yi, yl, override);\n};\n\nScreen.prototype.fillRegion = function (attr, ch, xi, xl, yi, yl, override) {\n  var lines = this.lines,\n    cell,\n    xx;\n\n  if (xi < 0) xi = 0;\n  if (yi < 0) yi = 0;\n\n  for (; yi < yl; yi++) {\n    if (!lines[yi]) break;\n    for (xx = xi; xx < xl; xx++) {\n      cell = lines[yi][xx];\n      if (!cell) break;\n      if (override || attr !== cell[0] || ch !== cell[1]) {\n        lines[yi][xx][0] = attr;\n        lines[yi][xx][1] = ch;\n        lines[yi].dirty = true;\n      }\n    }\n  }\n};\n\nScreen.prototype.key = function () {\n  return this.program.key.apply(this, arguments);\n};\n\nScreen.prototype.onceKey = function () {\n  return this.program.onceKey.apply(this, arguments);\n};\n\nScreen.prototype.unkey = Screen.prototype.removeKey = function () {\n  return this.program.unkey.apply(this, arguments);\n};\n\nScreen.prototype.spawn = function (file, args, options) {\n  if (!Array.isArray(args)) {\n    options = args;\n    args = [];\n  }\n\n  var screen = this,\n    program = screen.program,\n    spawn = cp.spawn,\n    mouse = program.mouseEnabled,\n    ps;\n\n  options = options || {};\n\n  options.stdio = options.stdio || 'inherit';\n\n  program.lsaveCursor('spawn');\n  // program.csr(0, program.rows - 1);\n  program.normalBuffer();\n  program.showCursor();\n  if (mouse) program.disableMouse();\n\n  var write = program.output.write;\n  program.output.write = function () {};\n  program.input.pause();\n  if (program.input.setRawMode) {\n    program.input.setRawMode(false);\n  }\n\n  var resume = function () {\n    if (resume.done) return;\n    resume.done = true;\n\n    if (program.input.setRawMode) {\n      program.input.setRawMode(true);\n    }\n    program.input.resume();\n    program.output.write = write;\n\n    program.alternateBuffer();\n    // program.csr(0, program.rows - 1);\n    if (mouse) {\n      program.enableMouse();\n      if (screen.options.sendFocus) {\n        screen.program.setMouse({ sendFocus: true }, true);\n      }\n    }\n\n    screen.alloc();\n    screen.render();\n\n    screen.program.lrestoreCursor('spawn', true);\n  };\n\n  ps = spawn(file, args, options);\n\n  ps.on('error', resume);\n\n  ps.on('exit', resume);\n\n  return ps;\n};\n\nScreen.prototype.exec = function (file, args, options, callback) {\n  var ps = this.spawn(file, args, options);\n\n  ps.on('error', function (err) {\n    if (!callback) return;\n    return callback(err, false);\n  });\n\n  ps.on('exit', function (code) {\n    if (!callback) return;\n    return callback(null, code === 0);\n  });\n\n  return ps;\n};\n\nScreen.prototype.readEditor = function (options, callback) {\n  if (typeof options === 'string') {\n    options = { editor: options };\n  }\n\n  if (!callback) {\n    callback = options;\n    options = null;\n  }\n\n  if (!callback) {\n    callback = function () {};\n  }\n\n  options = options || {};\n\n  var self = this,\n    editor = options.editor || process.env.EDITOR || 'vi',\n    name = options.name || process.title || 'blessed',\n    rnd = Math.random().toString(36).split('.').pop(),\n    file = path.join(os.tmpdir(), name + '.' + rnd),\n    args = [file],\n    opt;\n\n  opt = {\n    stdio: 'inherit',\n    env: process.env,\n    cwd: process.env.HOME,\n  };\n\n  function writeFile(callback) {\n    if (!options.value) return callback();\n    return fs.writeFile(file, options.value, callback);\n  }\n\n  return writeFile(function (err) {\n    if (err) return callback(err);\n    return self.exec(editor, args, opt, function (err, success) {\n      if (err) return callback(err);\n      return fs.readFile(file, 'utf8', function (err, data) {\n        return fs.unlink(file, function () {\n          if (!success) return callback(new Error('Unsuccessful.'));\n          if (err) return callback(err);\n          return callback(null, data);\n        });\n      });\n    });\n  });\n};\n\nScreen.prototype.displayImage = function (file, callback) {\n  if (!file) {\n    if (!callback) return;\n    return callback(new Error('No image.'));\n  }\n\n  file = path.resolve(process.cwd(), file);\n\n  if (!~file.indexOf('://')) {\n    file = 'file://' + file;\n  }\n\n  var args = ['w3m', '-T', 'text/html'];\n\n  var input =\n    '<title>press q to exit</title>' +\n    '<img align=\"center\" src=\"' +\n    file +\n    '\">';\n\n  var opt = {\n    stdio: ['pipe', 1, 2],\n    env: process.env,\n    cwd: process.env.HOME,\n  };\n\n  var ps = this.spawn(args[0], args.slice(1), opt);\n\n  ps.on('error', function (err) {\n    if (!callback) return;\n    return callback(err);\n  });\n\n  ps.on('exit', function (code) {\n    if (!callback) return;\n    if (code !== 0) return callback(new Error('Exit Code: ' + code));\n    return callback(null, code === 0);\n  });\n\n  ps.stdin.write(input + '\\n');\n  ps.stdin.end();\n};\n\nScreen.prototype.setEffects = function (el, fel, over, out, effects, temp) {\n  if (!effects) return;\n\n  var tmp = {};\n  if (temp) el[temp] = tmp;\n\n  if (typeof el !== 'function') {\n    var _el = el;\n    el = function () {\n      return _el;\n    };\n  }\n\n  fel.on(over, function () {\n    var element = el();\n    Object.keys(effects).forEach(function (key) {\n      var val = effects[key];\n      if (val !== null && typeof val === 'object') {\n        tmp[key] = tmp[key] || {};\n        // element.style[key] = element.style[key] || {};\n        Object.keys(val).forEach(function (k) {\n          var v = val[k];\n          tmp[key][k] = element.style[key][k];\n          element.style[key][k] = v;\n        });\n        return;\n      }\n      tmp[key] = element.style[key];\n      element.style[key] = val;\n    });\n    element.screen.render();\n  });\n\n  fel.on(out, function () {\n    var element = el();\n    Object.keys(effects).forEach(function (key) {\n      var val = effects[key];\n      if (val !== null && typeof val === 'object') {\n        tmp[key] = tmp[key] || {};\n        // element.style[key] = element.style[key] || {};\n        Object.keys(val).forEach(function (k) {\n          if (tmp[key].hasOwnProperty(k)) {\n            element.style[key][k] = tmp[key][k];\n          }\n        });\n        return;\n      }\n      if (tmp.hasOwnProperty(key)) {\n        element.style[key] = tmp[key];\n      }\n    });\n    element.screen.render();\n  });\n};\n\nScreen.prototype.sigtstp = function (callback) {\n  var self = this;\n  this.program.sigtstp(function () {\n    self.alloc();\n    self.render();\n    self.program.lrestoreCursor('pause', true);\n    if (callback) callback();\n  });\n};\n\nScreen.prototype.copyToClipboard = function (text) {\n  return this.program.copyToClipboard(text);\n};\n\nScreen.prototype.cursorShape = function (shape, blink) {\n  var self = this;\n\n  this.cursor.shape = shape || 'block';\n  this.cursor.blink = blink || false;\n  this.cursor._set = true;\n\n  if (this.cursor.artificial) {\n    if (!this.program.hideCursor_old) {\n      var hideCursor = this.program.hideCursor;\n      this.program.hideCursor_old = this.program.hideCursor;\n      this.program.hideCursor = function () {\n        hideCursor.call(self.program);\n        self.cursor._hidden = true;\n        if (self.renders) self.render();\n      };\n    }\n    if (!this.program.showCursor_old) {\n      var showCursor = this.program.showCursor;\n      this.program.showCursor_old = this.program.showCursor;\n      this.program.showCursor = function () {\n        self.cursor._hidden = false;\n        if (self.program._exiting) showCursor.call(self.program);\n        if (self.renders) self.render();\n      };\n    }\n    if (!this._cursorBlink) {\n      this._cursorBlink = setInterval(function () {\n        if (!self.cursor.blink) return;\n        self.cursor._state ^= 1;\n        if (self.renders) self.render();\n      }, 500);\n      if (this._cursorBlink.unref) {\n        this._cursorBlink.unref();\n      }\n    }\n    return true;\n  }\n\n  return this.program.cursorShape(this.cursor.shape, this.cursor.blink);\n};\n\nScreen.prototype.cursorColor = function (color) {\n  this.cursor.color = color != null ? colors.convert(color) : null;\n  this.cursor._set = true;\n\n  if (this.cursor.artificial) {\n    return true;\n  }\n\n  return this.program.cursorColor(colors.ncolors[this.cursor.color]);\n};\n\nScreen.prototype.cursorReset = Screen.prototype.resetCursor = function () {\n  this.cursor.shape = 'block';\n  this.cursor.blink = false;\n  this.cursor.color = null;\n  this.cursor._set = false;\n\n  if (this.cursor.artificial) {\n    this.cursor.artificial = false;\n    if (this.program.hideCursor_old) {\n      this.program.hideCursor = this.program.hideCursor_old;\n      delete this.program.hideCursor_old;\n    }\n    if (this.program.showCursor_old) {\n      this.program.showCursor = this.program.showCursor_old;\n      delete this.program.showCursor_old;\n    }\n    if (this._cursorBlink) {\n      clearInterval(this._cursorBlink);\n      delete this._cursorBlink;\n    }\n    return true;\n  }\n\n  return this.program.cursorReset();\n};\n\nScreen.prototype._cursorAttr = function (cursor, dattr) {\n  var attr = dattr || this.dattr,\n    cattr,\n    ch;\n\n  if (cursor.shape === 'line') {\n    // Set fg color to 7\n    attr =\n      (attr & 0xffffff) +\n      7 * 0x1000000 +\n      Math.floor(attr / 0x1000000000000) * 0x1000000000000;\n    ch = '\\u2502';\n  } else if (cursor.shape === 'underline') {\n    // Set fg color to 7 and underline flag\n    var flags = Math.floor(attr / 0x1000000000000) | 2;\n    attr = (attr & 0xffffff) + 7 * 0x1000000 + flags * 0x1000000000000;\n  } else if (cursor.shape === 'block') {\n    // Set fg color to 7 and inverse flag\n    var flags = Math.floor(attr / 0x1000000000000) | 8;\n    attr = (attr & 0xffffff) + 7 * 0x1000000 + flags * 0x1000000000000;\n  } else if (typeof cursor.shape === 'object' && cursor.shape) {\n    cattr = Element.prototype.sattr.call(cursor, cursor.shape);\n\n    if (\n      cursor.shape.bold ||\n      cursor.shape.underline ||\n      cursor.shape.blink ||\n      cursor.shape.inverse ||\n      cursor.shape.invisible\n    ) {\n      // Copy flags from cattr\n      var cflags = Math.floor(cattr / 0x1000000000000) & 0x1f;\n      attr = (attr & 0xffffffffffff) + cflags * 0x1000000000000;\n    }\n\n    if (cursor.shape.fg) {\n      // Copy fg from cattr\n      var cfg = Math.floor(cattr / 0x1000000) & 0xffffff;\n      attr =\n        (attr & 0xffffff) +\n        cfg * 0x1000000 +\n        Math.floor(attr / 0x1000000000000) * 0x1000000000000;\n    }\n\n    if (cursor.shape.bg) {\n      attr &= ~0xffffff;\n      attr |= cattr & 0xffffff;\n    }\n\n    if (cursor.shape.ch) {\n      ch = cursor.shape.ch;\n    }\n  }\n\n  if (cursor.color != null) {\n    // Set cursor foreground color\n    attr =\n      (attr & 0xffffff) +\n      cursor.color * 0x1000000 +\n      Math.floor(attr / 0x1000000000000) * 0x1000000000000;\n  }\n\n  return {\n    ch: ch,\n    attr: attr,\n  };\n};\n\nScreen.prototype.screenshot = function (xi, xl, yi, yl, term) {\n  if (xi == null) xi = 0;\n  if (xl == null) xl = this.cols;\n  if (yi == null) yi = 0;\n  if (yl == null) yl = this.rows;\n\n  if (xi < 0) xi = 0;\n  if (yi < 0) yi = 0;\n\n  var x, y, line, out, ch, data, attr;\n\n  var sdattr = this.dattr;\n\n  if (term) {\n    this.dattr = term.defAttr;\n  }\n\n  var main = '';\n\n  for (y = yi; y < yl; y++) {\n    line = term ? term.lines[y] : this.lines[y];\n\n    if (!line) break;\n\n    out = '';\n    attr = this.dattr;\n\n    for (x = xi; x < xl; x++) {\n      if (!line[x]) break;\n\n      data = line[x][0];\n      ch = line[x][1];\n\n      if (data !== attr) {\n        if (attr !== this.dattr) {\n          out += '\\x1b[m';\n        }\n        if (data !== this.dattr) {\n          var _data = data;\n          if (term) {\n            if (((_data >> 24) & 0xffffff) === 257) _data |= 0xffffff << 24;\n            if ((_data & 0xffffff) === 256) _data |= 0xffffff;\n          }\n          out += this.codeAttr(_data);\n        }\n      }\n\n      if (this.fullUnicode) {\n        if (unicode.charWidth(line[x][1]) === 2) {\n          if (x === xl - 1) {\n            ch = ' ';\n          } else {\n            x++;\n          }\n        }\n      }\n\n      out += ch;\n      attr = data;\n    }\n\n    if (attr !== this.dattr) {\n      out += '\\x1b[m';\n    }\n\n    if (out) {\n      main += (y > 0 ? '\\n' : '') + out;\n    }\n  }\n\n  main = main.replace(/(?:\\s*\\x1b\\[40m\\s*\\x1b\\[m\\s*)*$/, '') + '\\n';\n\n  if (term) {\n    this.dattr = sdattr;\n  }\n\n  return main;\n};\n\n/**\n * Positioning\n */\n\nScreen.prototype._getPos = function () {\n  return this;\n};\n\n/**\n * Angle Table\n */\n\nvar angles = {\n  '\\u2518': true, // '┘'\n  '\\u2510': true, // '┐'\n  '\\u250c': true, // '┌'\n  '\\u2514': true, // '└'\n  '\\u253c': true, // '┼'\n  '\\u251c': true, // '├'\n  '\\u2524': true, // '┤'\n  '\\u2534': true, // '┴'\n  '\\u252c': true, // '┬'\n  '\\u2502': true, // '│'\n  '\\u2500': true, // '─'\n};\n\nvar langles = {\n  '\\u250c': true, // '┌'\n  '\\u2514': true, // '└'\n  '\\u253c': true, // '┼'\n  '\\u251c': true, // '├'\n  '\\u2534': true, // '┴'\n  '\\u252c': true, // '┬'\n  '\\u2500': true, // '─'\n};\n\nvar uangles = {\n  '\\u2510': true, // '┐'\n  '\\u250c': true, // '┌'\n  '\\u253c': true, // '┼'\n  '\\u251c': true, // '├'\n  '\\u2524': true, // '┤'\n  '\\u252c': true, // '┬'\n  '\\u2502': true, // '│'\n};\n\nvar rangles = {\n  '\\u2518': true, // '┘'\n  '\\u2510': true, // '┐'\n  '\\u253c': true, // '┼'\n  '\\u2524': true, // '┤'\n  '\\u2534': true, // '┴'\n  '\\u252c': true, // '┬'\n  '\\u2500': true, // '─'\n};\n\nvar dangles = {\n  '\\u2518': true, // '┘'\n  '\\u2514': true, // '└'\n  '\\u253c': true, // '┼'\n  '\\u251c': true, // '├'\n  '\\u2524': true, // '┤'\n  '\\u2534': true, // '┴'\n  '\\u2502': true, // '│'\n};\n\n// var cdangles = {\n//   '\\u250c': true  // '┌'\n// };\n\n// Every ACS angle character can be\n// represented by 4 bits ordered like this:\n// [langle][uangle][rangle][dangle]\nvar angleTable = {\n  '0000': '', // ?\n  '0001': '\\u2502', // '│' // ?\n  '0010': '\\u2500', // '─' // ??\n  '0011': '\\u250c', // '┌'\n  '0100': '\\u2502', // '│' // ?\n  '0101': '\\u2502', // '│'\n  '0110': '\\u2514', // '└'\n  '0111': '\\u251c', // '├'\n  '1000': '\\u2500', // '─' // ??\n  '1001': '\\u2510', // '┐'\n  '1010': '\\u2500', // '─' // ??\n  '1011': '\\u252c', // '┬'\n  '1100': '\\u2518', // '┘'\n  '1101': '\\u2524', // '┤'\n  '1110': '\\u2534', // '┴'\n  '1111': '\\u253c', // '┼'\n};\n\nObject.keys(angleTable).forEach(function (key) {\n  angleTable[parseInt(key, 2)] = angleTable[key];\n  delete angleTable[key];\n});\n\n/**\n * Expose\n */\n\nexport default Screen;\n","/**\n * node.js - base abstract node for blessed\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\n/**\n * Modules\n */\n\nimport { EventEmitter } from 'events';\nimport '../events.js'; // Apply EventEmitter extensions\n\n/**\n * Interfaces\n */\n\ninterface NodeOptions {\n  screen?: any;\n  parent?: NodeInterface;\n  children?: NodeInterface[];\n  [key: string]: any;\n}\n\ninterface NodeScreen {\n  focused: any;\n  clickable: any[];\n  keyable: any[];\n  rewindFocus(): void;\n  total?: number;\n  global?: any;\n  instances?: any[];\n}\n\ninterface NodeData {\n  [key: string]: any;\n}\n\ninterface NodeInterface extends EventEmitter {\n  type: string;\n  options: NodeOptions;\n  screen: NodeScreen;\n  parent: NodeInterface | null;\n  children: NodeInterface[];\n  $: NodeData;\n  _: NodeData;\n  data: NodeData;\n  uid: number;\n  index: number;\n  detached: boolean;\n  destroyed?: boolean;\n\n  // Methods\n  insert(element: NodeInterface, i: number): void;\n  prepend(element: NodeInterface): void;\n  append(element: NodeInterface): void;\n  insertBefore(element: NodeInterface, other: NodeInterface): void;\n  insertAfter(element: NodeInterface, other: NodeInterface): void;\n  remove(element: NodeInterface): void;\n  detach(): void;\n  free(): void;\n  destroy(): void;\n  forDescendants(iter: (el: NodeInterface) => void, s?: boolean): void;\n  forAncestors(iter: (el: NodeInterface) => void, s?: boolean): void;\n  collectDescendants(s?: boolean): NodeInterface[];\n  collectAncestors(s?: boolean): NodeInterface[];\n  emitDescendants(...args: any[]): void;\n  emitAncestors(...args: any[]): void;\n  hasDescendant(target: NodeInterface): boolean;\n  hasAncestor(target: NodeInterface): boolean;\n  get(name: string, value?: any): any;\n  set(name: string, value: any): any;\n  clearPos?(): void;\n  emit(event: string, ...args: any[]): boolean;\n}\n\n/**\n * Node\n */\n\nfunction Node(this: NodeInterface, options?: NodeOptions) {\n  var self = this;\n  // Use lazy require to avoid circular dependency with screen\n  var getScreen = () => {\n    try {\n      const screenModule = require('./screen.js');\n      return screenModule.default || screenModule;\n    } catch {\n      try {\n        const screenModule = require('./screen');\n        return screenModule.default || screenModule;\n      } catch {\n        // Return a fallback object if screen is not available\n        return { total: 0, global: null, instances: [] };\n      }\n    }\n  };\n  var Screen = getScreen();\n\n  if (!(this instanceof Node)) {\n    return new Node(options);\n  }\n\n  EventEmitter.call(this);\n\n  options = options || {};\n  this.options = options;\n\n  this.screen = this.screen || options.screen;\n\n  if (!this.screen) {\n    if (this.type === 'screen') {\n      this.screen = this;\n    } else if (Screen.total === 1) {\n      this.screen = Screen.global;\n    } else if (options.parent) {\n      this.screen = options.parent;\n      while (this.screen && this.screen.type !== 'screen') {\n        this.screen = this.screen.parent;\n      }\n    } else if (Screen.total) {\n      // This _should_ work in most cases as long as the element is appended\n      // synchronously after the screen's creation. Throw error if not.\n      this.screen = Screen.instances[Screen.instances.length - 1];\n      process.nextTick(function () {\n        if (!self.parent) {\n          // In test environment, don't throw but warn instead\n          const isTestEnv =\n            process.env.NODE_ENV === 'test' ||\n            process.env.VITEST === 'true' ||\n            typeof global.expect !== 'undefined';\n\n          const message =\n            'Element (' +\n            self.type +\n            ')' +\n            ' was not appended synchronously after the' +\n            \" screen's creation. Please set a `parent`\" +\n            \" or `screen` option in the element's constructor\" +\n            ' if you are going to use multiple screens and' +\n            ' append the element later.';\n\n          if (isTestEnv) {\n            // In test environment, just warn instead of throwing\n            console.warn('Warning:', message);\n          } else {\n            throw new Error(message);\n          }\n        }\n      });\n    } else {\n      throw new Error('No active screen.');\n    }\n  }\n\n  this.parent = options.parent || null;\n  this.children = [];\n  this.$ = this._ = this.data = {};\n  this.uid = Node.uid++;\n  this.index = this.index != null ? this.index : -1;\n\n  if (this.type !== 'screen') {\n    this.detached = true;\n  }\n\n  if (this.parent) {\n    this.parent.append(this);\n  }\n\n  (options.children || []).forEach(this.append.bind(this));\n}\n\nNode.uid = 0;\n\nNode.prototype.__proto__ = EventEmitter.prototype;\n\nNode.prototype.type = 'node';\n\nNode.prototype.insert = function (\n  this: NodeInterface,\n  element: NodeInterface,\n  i: number\n): void {\n  var self = this;\n\n  if (element.screen && element.screen !== this.screen) {\n    throw new Error(\"Cannot switch a node's screen.\");\n  }\n\n  element.detach();\n  element.parent = this;\n  element.screen = this.screen;\n\n  if (i === 0) {\n    this.children.unshift(element);\n  } else if (i === this.children.length) {\n    this.children.push(element);\n  } else {\n    this.children.splice(i, 0, element);\n  }\n\n  element.emit('reparent', this);\n  this.emit('adopt', element);\n\n  (function emit(el) {\n    var n = el.detached !== self.detached;\n    el.detached = self.detached;\n    if (n) el.emit('attach');\n    el.children.forEach(emit);\n  })(element);\n\n  if (!this.screen.focused) {\n    this.screen.focused = element;\n  }\n};\n\nNode.prototype.prepend = function (\n  this: NodeInterface,\n  element: NodeInterface\n): void {\n  this.insert(element, 0);\n};\n\nNode.prototype.append = function (\n  this: NodeInterface,\n  element: NodeInterface\n): void {\n  this.insert(element, this.children.length);\n};\n\nNode.prototype.insertBefore = function (\n  this: NodeInterface,\n  element: NodeInterface,\n  other: NodeInterface\n): void {\n  var i = this.children.indexOf(other);\n  if (~i) this.insert(element, i);\n};\n\nNode.prototype.insertAfter = function (\n  this: NodeInterface,\n  element: NodeInterface,\n  other: NodeInterface\n): void {\n  var i = this.children.indexOf(other);\n  if (~i) this.insert(element, i + 1);\n};\n\nNode.prototype.remove = function (\n  this: NodeInterface,\n  element: NodeInterface\n): void {\n  if (element.parent !== this) return;\n\n  var i = this.children.indexOf(element);\n  if (!~i) return;\n\n  element.clearPos();\n\n  element.parent = null;\n\n  this.children.splice(i, 1);\n\n  i = this.screen.clickable.indexOf(element);\n  if (~i) this.screen.clickable.splice(i, 1);\n  i = this.screen.keyable.indexOf(element);\n  if (~i) this.screen.keyable.splice(i, 1);\n\n  element.emit('reparent', null);\n  this.emit('remove', element);\n\n  (function emit(el) {\n    var n = el.detached !== true;\n    el.detached = true;\n    if (n) el.emit('detach');\n    el.children.forEach(emit);\n  })(element);\n\n  if (this.screen.focused === element) {\n    this.screen.rewindFocus();\n  }\n};\n\nNode.prototype.detach = function (this: NodeInterface): void {\n  if (this.parent) this.parent.remove(this);\n};\n\nNode.prototype.free = function (this: NodeInterface): void {\n  return;\n};\n\nNode.prototype.destroy = function (this: NodeInterface): void {\n  this.detach();\n  this.forDescendants(function (el: NodeInterface) {\n    el.free();\n    el.destroyed = true;\n    el.emit('destroy');\n  }, this);\n};\n\nNode.prototype.forDescendants = function (\n  this: NodeInterface,\n  iter: (el: NodeInterface) => void,\n  s?: boolean\n): void {\n  if (s) iter(this);\n  if (this.children && Array.isArray(this.children)) {\n    this.children.forEach(function emit(el: NodeInterface) {\n      iter(el);\n      if (el.children && Array.isArray(el.children)) {\n        el.children.forEach(emit);\n      }\n    });\n  }\n};\n\nNode.prototype.forAncestors = function (\n  this: NodeInterface,\n  iter: (el: NodeInterface) => void,\n  s?: boolean\n): void {\n  var el: NodeInterface | null = this;\n  if (s) iter(this);\n  while ((el = el.parent)) {\n    iter(el);\n  }\n};\n\nNode.prototype.collectDescendants = function (\n  this: NodeInterface,\n  s?: boolean\n): NodeInterface[] {\n  var out: NodeInterface[] = [];\n  this.forDescendants(function (el: NodeInterface) {\n    out.push(el);\n  }, s);\n  return out;\n};\n\nNode.prototype.collectAncestors = function (\n  this: NodeInterface,\n  s?: boolean\n): NodeInterface[] {\n  var out: NodeInterface[] = [];\n  this.forAncestors(function (el: NodeInterface) {\n    out.push(el);\n  }, s);\n  return out;\n};\n\nNode.prototype.emitDescendants = function () {\n  var args = Array.prototype.slice(arguments),\n    iter;\n\n  if (typeof args[args.length - 1] === 'function') {\n    iter = args.pop();\n  }\n\n  return this.forDescendants(function (el) {\n    if (iter) iter(el);\n    el.emit.apply(el, args);\n  }, true);\n};\n\nNode.prototype.emitAncestors = function () {\n  var args = Array.prototype.slice(arguments),\n    iter;\n\n  if (typeof args[args.length - 1] === 'function') {\n    iter = args.pop();\n  }\n\n  return this.forAncestors(function (el) {\n    if (iter) iter(el);\n    el.emit.apply(el, args);\n  }, true);\n};\n\nNode.prototype.hasDescendant = function (target) {\n  return (function find(el) {\n    for (var i = 0; i < el.children.length; i++) {\n      if (el.children[i] === target) {\n        return true;\n      }\n      if (find(el.children[i]) === true) {\n        return true;\n      }\n    }\n    return false;\n  })(this);\n};\n\nNode.prototype.hasAncestor = function (target) {\n  var el = this;\n  while ((el = el.parent)) {\n    if (el === target) return true;\n  }\n  return false;\n};\n\nNode.prototype.get = function (\n  this: NodeInterface,\n  name: string,\n  value?: any\n): any {\n  if (this.data.hasOwnProperty(name)) {\n    return this.data[name];\n  }\n  return value;\n};\n\nNode.prototype.set = function (\n  this: NodeInterface,\n  name: string,\n  value: any\n): any {\n  return (this.data[name] = value);\n};\n\n/**\n * Expose\n */\n\nexport default Node;\n","/**\n * image-processor.ts - modern PNG/GIF reader replacement for tng.js\n * Copyright (c) 2025, Contributors (MIT License).\n * Replaces the legacy vendor/tng.js with modern npm dependencies\n */\n\nimport { PNG } from 'pngjs';\nimport * as fs from 'fs';\n\ninterface ImageOptions {\n  colors?: any;\n  width?: number;\n  height?: number;\n  scale?: number;\n  ascii?: boolean;\n  speed?: number;\n  filename?: string;\n}\n\ninterface CellMap {\n  [row: number]: any[];\n  length: number;\n}\n\ninterface ImageResult {\n  cellmap: CellMap;\n  frames?: any[] | undefined;\n  play?(callback: (bmp: any, cellmap: CellMap) => void): any;\n  pause?(): any;\n  stop?(): any;\n  renderElement?(cellmap: CellMap, element: any): void;\n}\n\nclass ModernImageProcessor {\n  private options: ImageOptions;\n  private colors: any;\n  private png: PNG | null = null;\n\n  constructor(file: string | Buffer, options: ImageOptions = {}) {\n    this.options = options;\n    this.colors = options.colors || require('./colors');\n\n    this.loadImage(file);\n  }\n\n  private loadImage(file: string | Buffer): void {\n    let buf: Buffer;\n\n    if (Buffer.isBuffer(file)) {\n      buf = file;\n    } else {\n      buf = fs.readFileSync(file);\n    }\n\n    // Detect format and load image\n    if (buf.readUInt32BE(0) === 0x89504e47) {\n      // PNG format\n      this.png = PNG.sync.read(buf);\n    } else if (buf.slice(0, 3).toString('ascii') === 'GIF') {\n      throw new Error('GIF format not yet supported in modern implementation');\n    } else if (buf.readUInt16BE(0) === 0xffd8) {\n      throw new Error('JPEG format not yet supported in modern implementation');\n    } else {\n      throw new Error('Unsupported image format');\n    }\n  }\n\n  createCellmap(): CellMap {\n    if (!this.png) {\n      throw new Error('No image loaded');\n    }\n\n    const bmp = this.pngToBitmap();\n    return this.bitmapToCellmap(bmp);\n  }\n\n  private pngToBitmap(): number[][][] {\n    if (!this.png) {\n      throw new Error('No PNG loaded');\n    }\n\n    const { width, height, data } = this.png;\n    const bmp: number[][][] = [];\n\n    for (let y = 0; y < height; y++) {\n      const row: number[][] = [];\n      for (let x = 0; x < width; x++) {\n        const idx = (width * y + x) << 2;\n        const r = data[idx] ?? 0;\n        const g = data[idx + 1] ?? 0;\n        const b = data[idx + 2] ?? 0;\n        const a = data[idx + 3] ?? 255;\n        row.push([r, g, b, a]);\n      }\n      bmp.push(row);\n    }\n\n    return bmp;\n  }\n\n  private bitmapToCellmap(bmp: number[][][]): CellMap {\n    const cellmap: any[] = [];\n    const scale = this.options.scale || 0.2;\n    const height = bmp.length;\n    const width = bmp[0]?.length ?? 0;\n\n    let cmwidth = this.options.width || 0;\n    let cmheight = this.options.height || 0;\n\n    let actualScale = scale;\n    if (cmwidth) {\n      actualScale = cmwidth / width;\n    } else if (cmheight) {\n      actualScale = cmheight / height;\n    }\n\n    if (!cmheight) {\n      cmheight = Math.round(height * actualScale);\n    }\n\n    if (!cmwidth) {\n      cmwidth = Math.round(width * actualScale);\n    }\n\n    const ys = height / cmheight;\n    const xs = width / cmwidth;\n\n    for (let y = 0; y < bmp.length; y += ys) {\n      const line: any[] = [];\n      const yy = Math.round(y);\n      if (!bmp[yy]) break;\n\n      for (let x = 0; x < bmp[yy].length; x += xs) {\n        const xx = Math.round(x);\n        if (!bmp[yy][xx]) break;\n\n        // Convert RGBA to terminal cell representation\n        const pixel = bmp[yy][xx];\n        const cell = this.pixelToCell(pixel);\n        line.push(cell);\n      }\n      cellmap.push(line);\n    }\n\n    // Add length property for compatibility\n    Object.defineProperty(cellmap, 'length', {\n      value: cellmap.length,\n      writable: true,\n      enumerable: false,\n      configurable: true,\n    });\n\n    return cellmap as CellMap;\n  }\n\n  private pixelToCell(pixel: number[]): any {\n    // Convert RGBA pixel to terminal cell representation\n    // This is a simplified version - the original tng.js had complex color matching\n    const [r, g, b, a] = pixel;\n\n    if ((a ?? 255) < 128) {\n      // Transparent pixel\n      return { char: ' ', fg: 'default', bg: 'default' };\n    }\n\n    // Use the colors module to find the best matching color\n    if (this.colors?.match) {\n      const color = this.colors.match(r ?? 0, g ?? 0, b ?? 0);\n      return {\n        char: '█', // Full block character\n        fg: color,\n        bg: 'default',\n      };\n    }\n\n    // Fallback: basic grayscale\n    const gray = Math.round(((r ?? 0) + (g ?? 0) + (b ?? 0)) / 3);\n    const char = gray > 128 ? '█' : gray > 64 ? '▓' : gray > 32 ? '▒' : '░';\n\n    return {\n      char: char,\n      fg: 'white',\n      bg: 'default',\n    };\n  }\n}\n\n// Synchronous wrapper to match tng.js API\nfunction processImage(\n  file: string | Buffer,\n  options: ImageOptions = {}\n): ImageResult {\n  const processor = new ModernImageProcessor(file, options);\n\n  const result: ImageResult = {\n    cellmap: processor.createCellmap(),\n    // GIF support would go here\n  };\n\n  return result;\n}\n\nexport = processImage;\n","/**\n * blessed - a high-level terminal interface library for node.js\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\nimport program from './program.js';\nimport tput, { sprintf, tryRead } from './tput.js';\nimport widget from './widget.js';\n// Re-export core factories as named ESM exports for first-class module usage\n// This avoids consumers needing to import the default namespace just to reach\n// widget constructors (e.g. `import { box } from \"blessed\"`).\n// Keep program/tput as named exports\nexport { default as program } from './program.js';\nexport { default as tput } from './tput.js';\n// Surface widget factories as simple named bindings (typed as any).\n// This avoids d.ts build issues from re-exporting every widget module directly.\n// Consumers still get ergonomic ESM imports.\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const screen: any = (widget as any).screen;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const box: any = (widget as any).box;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const text: any = (widget as any).text;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const line: any = (widget as any).line;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const list: any = (widget as any).list;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const scrollablebox: any = (widget as any).scrollablebox;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const scrollabletext: any = (widget as any).scrollabletext;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const log: any = (widget as any).log;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const textbox: any = (widget as any).textbox;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const textarea: any = (widget as any).textarea;\nimport * as colors from './colors.js';\nimport * as unicode from './unicode.js';\nimport * as helpers from './helpers.js';\nimport './events.js'; // Apply EventEmitter extensions\n\n/**\n * The main blessed namespace that provides access to all widgets and functionality.\n *\n * @example\n * ```typescript\n * import blessed from 'neo-neo-blessed';\n *\n * const screen = blessed.screen({\n *   smartCSR: true\n * });\n *\n * const box = blessed.box({\n *   parent: screen,\n *   top: 'center',\n *   left: 'center',\n *   width: '50%',\n *   height: '50%',\n *   content: 'Hello World!',\n *   tags: true,\n *   border: {\n *     type: 'line'\n *   },\n *   style: {\n *     fg: 'white',\n *     bg: 'magenta',\n *     border: {\n *       fg: '#f0f0f0'\n *     },\n *     hover: {\n *       bg: 'green'\n *     }\n *   }\n * });\n *\n * screen.render();\n * ```\n */\nfunction blessed() {\n  return blessed.program.apply(null, arguments);\n}\n\nblessed.program = blessed.Program = program;\nblessed.tput = blessed.Tput = tput;\nblessed.widget = widget;\nblessed.colors = colors;\nblessed.unicode = unicode;\nblessed.helpers = helpers;\n\n(blessed.helpers as any).sprintf = sprintf;\n(blessed.helpers as any).tryRead = tryRead;\nblessed.helpers.merge(blessed, blessed.helpers);\n\nblessed.helpers.merge(blessed, blessed.widget);\n\n/**\n * Expose\n */\n\nexport default blessed;\n","/**\n * widget.js - high-level interface for blessed\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\n// Static imports for bundler compatibility\nimport node from './widgets/node.js';\nimport screen from './widgets/screen.js';\nimport element from './widgets/element.js';\nimport box from './widgets/box.js';\nimport text from './widgets/text.js';\nimport line from './widgets/line.js';\nimport scrollablebox from './widgets/scrollablebox.js';\nimport scrollabletext from './widgets/scrollabletext.js';\nimport bigtext from './widgets/bigtext.js';\nimport list from './widgets/list.js';\nimport form from './widgets/form.js';\nimport input from './widgets/input.js';\nimport textarea from './widgets/textarea.js';\nimport textbox from './widgets/textbox.js';\nimport button from './widgets/button.js';\nimport progressbar from './widgets/progressbar.js';\nimport filemanager from './widgets/filemanager.js';\nimport checkbox from './widgets/checkbox.js';\nimport radioset from './widgets/radioset.js';\nimport radiobutton from './widgets/radiobutton.js';\nimport prompt from './widgets/prompt.js';\nimport question from './widgets/question.js';\nimport message from './widgets/message.js';\nimport loading from './widgets/loading.js';\nimport listbar from './widgets/listbar.js';\nimport log from './widgets/log.js';\nimport table from './widgets/table.js';\nimport listtable from './widgets/listtable.js';\nimport terminal from './widgets/terminal.js';\nimport image from './widgets/image.js';\nimport ansiimage from './widgets/ansiimage.js';\nimport overlayimage from './widgets/overlayimage.js';\nimport video from './widgets/video.js';\nimport layout from './widgets/layout.js';\n\nconst widget = {} as any;\n\nwidget.classes = [\n  'Node',\n  'Screen',\n  'Element',\n  'Box',\n  'Text',\n  'Line',\n  'ScrollableBox',\n  'ScrollableText',\n  'BigText',\n  'List',\n  'Form',\n  'Input',\n  'Textarea',\n  'Textbox',\n  'Button',\n  'ProgressBar',\n  'FileManager',\n  'Checkbox',\n  'RadioSet',\n  'RadioButton',\n  'Prompt',\n  'Question',\n  'Message',\n  'Loading',\n  'Listbar',\n  'Log',\n  'Table',\n  'ListTable',\n  'Terminal',\n  'Image',\n  'ANSIImage',\n  'OverlayImage',\n  'Video',\n  'Layout',\n];\n\n// Static widget mapping for bundler compatibility\nconst widgetMap = {\n  node,\n  screen,\n  element,\n  box,\n  text,\n  line,\n  scrollablebox,\n  scrollabletext,\n  bigtext,\n  list,\n  form,\n  input,\n  textarea,\n  textbox,\n  button,\n  progressbar,\n  filemanager,\n  checkbox,\n  radioset,\n  radiobutton,\n  prompt,\n  question,\n  message,\n  loading,\n  listbar,\n  log,\n  table,\n  listtable,\n  terminal,\n  image,\n  ansiimage,\n  overlayimage,\n  video,\n  layout,\n};\n\nwidget.classes.forEach(function (name) {\n  var file = name.toLowerCase();\n  widget[name] = widget[file] = widgetMap[file];\n});\n\nwidget.aliases = {\n  ListBar: 'Listbar',\n  PNG: 'ANSIImage',\n};\n\nObject.keys(widget.aliases).forEach(function (key) {\n  var name = widget.aliases[key];\n  widget[key] = widget[name];\n  widget[key.toLowerCase()] = widget[name];\n});\n\nexport default widget;\n","/**\n * text.js - text element for blessed\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\n/**\n * Modules\n */\n\nimport Node from './node.js';\nimport Element from './element.js';\n\n/**\n * Type definitions\n */\n\ninterface TextOptions {\n  shrink?: boolean | string;\n  [key: string]: any;\n}\n\ninterface TextInterface extends Element {\n  type: string;\n}\n\n/**\n * Text - Modern ES6 Class\n */\n\nclass Text extends Element {\n  type = 'text';\n\n  constructor(options?: TextOptions) {\n    // Handle malformed options gracefully\n    if (!options || typeof options !== 'object' || Array.isArray(options)) {\n      options = {};\n    }\n\n    // Set default shrink behavior for text (key Text feature)\n    options.shrink = 'shrink' in options ? options.shrink : true;\n\n    super(options);\n  }\n}\n\n/**\n * Factory function for backward compatibility\n */\nfunction text(options?: TextOptions): TextInterface {\n  return new Text(options) as TextInterface;\n}\n\n// Attach the class as a property for direct access\ntext.Text = Text;\n\n/**\n * Expose\n */\n\nexport default text;\n","/**\n * line.js - line element for blessed\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\n/**\n * Modules\n */\n\nimport Node from './node.js';\nimport boxFactory from './box.js';\nconst Box = boxFactory.Box;\n\n/**\n * Type definitions\n */\n\ninterface LineOptions {\n  orientation?: 'vertical' | 'horizontal';\n  type?: string;\n  ch?: string;\n  width?: number;\n  height?: number;\n  [key: string]: any;\n}\n\ninterface Border {\n  type: string;\n  __proto__: any;\n}\n\ninterface LineInterface extends Box {\n  type: string;\n  ch: string;\n  border: Border;\n  style: any;\n}\n\n/**\n * Line - Modern ES6 Class\n */\n\nclass Line extends Box {\n  type = 'line';\n  ch: string;\n  border: Border;\n\n  constructor(options?: LineOptions) {\n    // Handle malformed options gracefully\n    if (!options || typeof options !== 'object' || Array.isArray(options)) {\n      options = {};\n    }\n\n    const orientation = options.orientation || 'vertical';\n\n    // Create a copy of options to avoid modifying the original\n    const lineOptions = { ...options };\n    delete lineOptions.orientation;\n\n    // Set dimensions based on orientation\n    if (orientation === 'vertical') {\n      lineOptions.width = 1;\n    } else {\n      lineOptions.height = 1;\n    }\n\n    super(lineOptions);\n\n    // Set the character based on orientation and type\n    this.ch =\n      !options.type || options.type === 'line'\n        ? orientation === 'horizontal'\n          ? '─'\n          : '│'\n        : options.ch || ' ';\n\n    // Set up border configuration\n    this.border = {\n      type: 'bg',\n      __proto__: this,\n    };\n\n    // Configure border style\n    this.style.border = this.style;\n  }\n}\n\n/**\n * Factory function for backward compatibility\n */\nfunction line(options?: LineOptions): LineInterface {\n  return new Line(options) as LineInterface;\n}\n\n// Attach the class as a property for direct access\nline.Line = Line;\n\n/**\n * Expose\n */\n\nexport default line;\n","/**\n * bigtext.js - bigtext element for blessed\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\n/**\n * Modules\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { fileURLToPath } from 'url';\n\nimport Node from './node.js';\nimport boxFactory from './box.js';\nconst Box = boxFactory.Box;\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\n/**\n * Type definitions\n */\n\ninterface BigTextOptions {\n  font?: string;\n  fontBold?: string;\n  fch?: string;\n  [key: string]: any;\n}\n\ninterface BigTextRatio {\n  width: number;\n  height: number;\n}\n\ninterface BigTextPosition {\n  width?: number;\n  height?: number;\n}\n\ninterface BigTextStyle {\n  bold?: boolean;\n  [key: string]: any;\n}\n\ninterface BigTextCoords {\n  xi: number;\n  xl: number;\n  yi: number;\n  yl: number;\n}\n\ninterface BigTextGlyph {\n  map: string[];\n}\n\ninterface BigTextFontData {\n  width: number;\n  height: number;\n  glyphs: { [key: string]: BigTextGlyph };\n}\n\ninterface BigTextFont {\n  [character: string]: number[][];\n}\n\ninterface BigTextLine {\n  dirty?: boolean;\n  [index: number]: [number, string];\n}\n\ninterface BigTextScreen {\n  lines: BigTextLine[];\n}\n\ninterface BigTextInterface extends Box {\n  type: string;\n  fch?: string;\n  ratio: BigTextRatio;\n  font: BigTextFont;\n  fontBold: BigTextFont;\n  text: string;\n  content: string;\n  style: BigTextStyle;\n  position: BigTextPosition;\n  _shrinkWidth?: boolean;\n  _shrinkHeight?: boolean;\n  screen: BigTextScreen;\n  ileft: number;\n  itop: number;\n  iright: number;\n  ibottom: number;\n  ch: string;\n  loadFont(filename: string): BigTextFont;\n  setContent(content: string): void;\n  render(): BigTextCoords | undefined;\n  _render(): BigTextCoords | undefined;\n  sattr(style: any): number;\n}\n\n/**\n * BigText - Modern ES6 Class\n */\n\nclass BigText extends Box {\n  type = 'bigtext';\n  fch?: string;\n  ratio: BigTextRatio;\n  font: BigTextFont;\n  fontBold: BigTextFont;\n  text: string;\n  _shrinkWidth?: boolean;\n  _shrinkHeight?: boolean;\n\n  constructor(options?: BigTextOptions) {\n    // Handle malformed options gracefully\n    if (!options || typeof options !== 'object' || Array.isArray(options)) {\n      options = {};\n    }\n\n    // Set default font paths\n    options.font =\n      options.font || path.join(__dirname, '../usr/fonts/ter-u14n.json');\n    options.fontBold =\n      options.fontBold || path.join(__dirname, '../usr/fonts/ter-u14b.json');\n\n    super(options);\n\n    this.fch = options.fch;\n    this.ratio = {} as BigTextRatio;\n    this.font = this.loadFont(options.font);\n    this.fontBold = this.loadFont(options.fontBold);\n\n    if (this.style.bold) {\n      this.font = this.fontBold;\n    }\n  }\n\n  loadFont(filename: string): BigTextFont {\n    let data: BigTextFontData;\n    let font: BigTextFont;\n\n    data = JSON.parse(fs.readFileSync(filename, 'utf8'));\n\n    this.ratio.width = data.width;\n    this.ratio.height = data.height;\n\n    const convertLetter = (ch: string, lines: string[]): number[][] => {\n      let line: number[], i: number;\n\n      while (lines.length > this.ratio.height) {\n        lines.shift();\n        lines.pop();\n      }\n\n      lines = lines.map((line: string): number[] => {\n        let chs = line.split('');\n        let chsNumbers = chs.map((ch: string): number => {\n          return ch === ' ' ? 0 : 1;\n        });\n        while (chsNumbers.length < this.ratio.width) {\n          chsNumbers.push(0);\n        }\n        return chsNumbers;\n      });\n\n      while (lines.length < this.ratio.height) {\n        line = [];\n        for (i = 0; i < this.ratio.width; i++) {\n          line.push(0);\n        }\n        lines.push(line as any);\n      }\n\n      return lines as number[][];\n    };\n\n    font = Object.keys(data.glyphs).reduce(\n      (out: BigTextFont, ch: string): BigTextFont => {\n        const lines = data.glyphs[ch].map;\n        out[ch] = convertLetter(ch, lines);\n        return out;\n      },\n      {}\n    );\n\n    delete font[' '];\n\n    return font;\n  }\n\n  setContent(content: string): void {\n    this.content = '';\n    this.text = content || '';\n  }\n\n  render(): BigTextCoords | undefined {\n    if (this.position.width == null || this._shrinkWidth) {\n      // if (this.width - this.iwidth < this.ratio.width * this.text.length + 1) {\n      this.position.width = this.ratio.width * this.text.length + 1;\n      this._shrinkWidth = true;\n      // }\n    }\n    if (this.position.height == null || this._shrinkHeight) {\n      // if (this.height - this.iheight < this.ratio.height + 0) {\n      this.position.height = this.ratio.height + 0;\n      this._shrinkHeight = true;\n      // }\n    }\n\n    const coords = this._render();\n    if (!coords) return;\n\n    const lines = this.screen.lines;\n    const left = coords.xi + this.ileft;\n    const top = coords.yi + this.itop;\n    const right = coords.xl - this.iright;\n    const bottom = coords.yl - this.ibottom;\n\n    const dattr = this.sattr(this.style);\n    const bg = dattr & 0x1ff;\n    const fg = (dattr >> 9) & 0x1ff;\n    const flags = (dattr >> 18) & 0x1ff;\n    const attr = (flags << 18) | (bg << 9) | fg;\n\n    for (let x = left, i = 0; x < right; x += this.ratio.width, i++) {\n      const ch = this.text[i];\n      if (!ch) break;\n      const map = this.font[ch];\n      if (!map) continue;\n      for (let y = top; y < Math.min(bottom, top + this.ratio.height); y++) {\n        if (!lines[y]) continue;\n        const mline = map[y - top];\n        if (!mline) continue;\n        for (let mx = 0; mx < this.ratio.width; mx++) {\n          const mcell = mline[mx];\n          if (mcell == null) break;\n          if (this.fch && this.fch !== ' ') {\n            lines[y][x + mx][0] = dattr;\n            lines[y][x + mx][1] = mcell === 1 ? this.fch : this.ch;\n          } else {\n            lines[y][x + mx][0] = mcell === 1 ? attr : dattr;\n            lines[y][x + mx][1] = mcell === 1 ? ' ' : this.ch;\n          }\n        }\n        lines[y].dirty = true;\n      }\n    }\n\n    return coords;\n  }\n}\n\n/**\n * Factory function for backward compatibility\n */\nfunction bigtext(options?: BigTextOptions): BigTextInterface {\n  return new BigText(options) as BigTextInterface;\n}\n\n// Attach the class as a property for direct access\nbigtext.BigText = BigText;\n\n/**\n * Expose\n */\n\nexport default bigtext;\n","/**\n * list.js - list element for blessed\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\n/**\n * Modules\n */\n\nimport * as helpers from '../helpers.js';\nimport Node from './node.js';\nimport boxFactory from './box.js';\nconst Box = boxFactory.Box;\nimport scrollableBoxFactory from './scrollablebox.js';\nconst ScrollableBox = scrollableBoxFactory.ScrollableBox;\n\n/**\n * List - Modern ES6 Class\n */\n\nclass List extends ScrollableBox {\n  type = 'list';\n  value: string;\n  items: any[];\n  ritems: string[];\n  selected: number;\n  _isList: boolean;\n  interactive: boolean;\n  mouse: boolean;\n  _listInitialized?: boolean;\n\n  constructor(options?: any) {\n    // Handle malformed options gracefully\n    if (!options || typeof options !== 'object' || Array.isArray(options)) {\n      options = {};\n    }\n\n    // Force list-specific options\n    options.ignoreKeys = true;\n\n    super(options);\n\n    this.value = '';\n    this.items = [];\n    this.ritems = [];\n    this.selected = 0;\n    this._isList = true;\n\n    // Set up selected styles\n    if (!this.style.selected) {\n      this.style.selected = {};\n      this.style.selected.bg = options.selectedBg;\n      this.style.selected.fg = options.selectedFg;\n      this.style.selected.bold = options.selectedBold;\n      this.style.selected.underline = options.selectedUnderline;\n      this.style.selected.blink = options.selectedBlink;\n      this.style.selected.inverse = options.selectedInverse;\n      this.style.selected.invisible = options.selectedInvisible;\n    }\n\n    // Set up item styles\n    if (!this.style.item) {\n      this.style.item = {};\n      this.style.item.bg = options.itemBg;\n      this.style.item.fg = options.itemFg;\n      this.style.item.bold = options.itemBold;\n      this.style.item.underline = options.itemUnderline;\n      this.style.item.blink = options.itemBlink;\n      this.style.item.inverse = options.itemInverse;\n      this.style.item.invisible = options.itemInvisible;\n    }\n\n    // Legacy: for apps written before the addition of item attributes.\n    ['bg', 'fg', 'bold', 'underline', 'blink', 'inverse', 'invisible'].forEach(\n      (name: string) => {\n        if (this.style[name] != null && this.style.item![name] == null) {\n          this.style.item![name] = this.style[name];\n        }\n      }\n    );\n\n    // Set up hover and focus effects\n    if (this.options.itemHoverBg && !this.options.itemHoverEffects) {\n      this.options.itemHoverEffects = { bg: this.options.itemHoverBg };\n    }\n\n    if (this.options.itemHoverEffects) {\n      this.style.item!.hover = this.options.itemHoverEffects;\n    }\n\n    if (this.options.itemFocusEffects) {\n      this.style.item!.focus = this.options.itemFocusEffects;\n    }\n\n    if (this.options.itemHeight) {\n      this.style.item!.height = this.options.itemHeight;\n    }\n\n    this.interactive = options.interactive !== false;\n    this.mouse = options.mouse || false;\n\n    // Set up mouse interaction\n    if (options.mouse) {\n      this.screen._listenMouse(this);\n      this.on('element wheeldown', () => {\n        this.select(this.selected + 2);\n        this.screen.render();\n      });\n      this.on('element wheelup', () => {\n        this.select(this.selected - 2);\n        this.screen.render();\n      });\n    }\n\n    // Set up keyboard interaction\n    if (options.keys) {\n      this.on('keypress', (ch: string, key: any) => {\n        if (key.name === 'up' || (options!.vi && key.name === 'k')) {\n          this.up();\n          this.screen.render();\n          return;\n        }\n        if (key.name === 'down' || (options!.vi && key.name === 'j')) {\n          this.down();\n          this.screen.render();\n          return;\n        }\n        if (\n          key.name === 'enter' ||\n          (options!.vi && key.name === 'l' && !key.shift)\n        ) {\n          this.enterSelected();\n          return;\n        }\n        if (key.name === 'escape' || (options!.vi && key.name === 'q')) {\n          this.cancelSelected();\n          return;\n        }\n        if (options!.vi && key.name === 'u' && key.ctrl) {\n          this.move(-((this.height - this.iheight) / 2) | 0);\n          this.screen.render();\n          return;\n        }\n        if (options!.vi && key.name === 'd' && key.ctrl) {\n          this.move(((this.height - this.iheight) / 2) | 0);\n          this.screen.render();\n          return;\n        }\n        if (options!.vi && key.name === 'b' && key.ctrl) {\n          this.move(-(this.height - this.iheight));\n          this.screen.render();\n          return;\n        }\n        if (options!.vi && key.name === 'f' && key.ctrl) {\n          this.move(this.height - this.iheight);\n          this.screen.render();\n          return;\n        }\n        if (options!.vi && key.name === 'h' && key.shift) {\n          this.move(this.childBase - this.selected);\n          this.screen.render();\n          return;\n        }\n        if (options!.vi && key.name === 'm' && key.shift) {\n          const visible =\n            (Math.min(this.height - this.iheight, this.items.length) / 2) | 0;\n          this.move(this.childBase + visible - this.selected);\n          this.screen.render();\n          return;\n        }\n        if (options!.vi && key.name === 'l' && key.shift) {\n          this.down(\n            this.childBase +\n              Math.min(this.height - this.iheight, this.items.length) -\n              this.selected\n          );\n          this.screen.render();\n          return;\n        }\n        if (options!.vi && key.name === 'g' && !key.shift) {\n          this.select(0);\n          this.screen.render();\n          return;\n        }\n        if (options!.vi && key.name === 'g' && key.shift) {\n          this.select(this.items.length - 1);\n          this.screen.render();\n          return;\n        }\n\n        if (options!.vi && (key.ch === '/' || key.ch === '?')) {\n          if (typeof this.options.search !== 'function') {\n            return;\n          }\n          return this.options.search((err: any, value?: string) => {\n            if (\n              typeof err === 'string' ||\n              typeof err === 'function' ||\n              typeof err === 'number' ||\n              (err && err.test)\n            ) {\n              value = err;\n              err = null;\n            }\n            if (err || !value) return this.screen.render();\n            this.select(this.fuzzyFind(value, key.ch === '?'));\n            this.screen.render();\n          });\n        }\n      });\n    }\n\n    // Set up event handlers\n    this.on('resize', () => {\n      const visible = this.height - this.iheight;\n      if (visible >= this.selected + 1) {\n        this.childBase = 0;\n        this.childOffset = this.selected;\n      } else {\n        this.childBase = this.selected - visible + 1;\n        this.childOffset = visible - 1;\n      }\n    });\n\n    this.on('adopt', (el: any) => {\n      if (!~this.items.indexOf(el)) {\n        el.fixed = true;\n      }\n    });\n\n    this.on('remove', (el: any) => {\n      this.removeItem(el);\n    });\n\n    // Initialize with items if provided\n    if (options.items) {\n      options.items.forEach((item: any) => this.add(item));\n    }\n\n    this.select(0);\n  }\n\n  createItem = (content: string): any => {\n    const options: any = {\n      screen: this.screen,\n      content: content,\n      align: this.align || 'left',\n      top: 0,\n      left: 0,\n      right: this.scrollbar ? 1 : 0,\n      tags: this.parseTags,\n      height: this.style.item.height || 1,\n      hoverEffects: this.mouse ? this.style.item.hover : null,\n      focusEffects: this.mouse ? this.style.item.focus : null,\n      autoFocus: false,\n    };\n\n    if (!this.screen.autoPadding) {\n      options.top = 1;\n      options.left = this.ileft;\n      options.right = this.iright + (this.scrollbar ? 1 : 0);\n    }\n\n    if (this.shrink && this.options.normalShrink) {\n      delete options.right;\n      options.width = 'shrink';\n    }\n\n    let item: any;\n    ['bg', 'fg', 'bold', 'underline', 'blink', 'inverse', 'invisible'].forEach(\n      (name: string) => {\n        options[name] = () => {\n          const attr =\n            this.items[this.selected] === item && this.interactive\n              ? this.style.selected[name]\n              : this.style.item[name];\n          if (typeof attr === 'function') return attr(item);\n          return attr;\n        };\n      }\n    );\n\n    item = new Box(options);\n\n    if (this.style.transparent) {\n      options.transparent = true;\n    }\n\n    if (this.mouse) {\n      item.on('click', () => {\n        this.focus();\n        if (this.items[this.selected] === item) {\n          this.emit('action', item, this.selected);\n          this.emit('select', item, this.selected);\n          return;\n        }\n        this.select(item);\n        this.screen.render();\n      });\n    }\n\n    this.emit('create item');\n    return item;\n  };\n\n  add = (content: any): any => {\n    content = typeof content === 'string' ? content : content.getContent();\n\n    const item = this.createItem(content);\n    item.position.top = this.items\n      .map(i => i.height)\n      .reduce((a, b) => a + b, 0);\n    if (!this.screen.autoPadding) {\n      item.position.top = this.itop + this.items.length;\n    }\n\n    this.ritems.push(content);\n    this.items.push(item);\n    this.append(item);\n\n    if (this.items.length === 1) {\n      this.select(0);\n    }\n\n    this.emit('add item');\n    return item;\n  };\n\n  addItem(content: any): any {\n    return this.add(content);\n  }\n\n  appendItem(content: any): any {\n    return this.add(content);\n  }\n\n  removeItem(child: any): any {\n    const i = this.getItemIndex(child);\n    if (~i && this.items[i]) {\n      child = this.items.splice(i, 1)[0];\n      this.ritems.splice(i, 1);\n      this.remove(child);\n      for (let j = i; j < this.items.length; j++) {\n        this.items[j].position.top--;\n      }\n      if (i === this.selected) {\n        this.select(i - 1);\n      }\n    }\n    this.emit('remove item');\n    return child;\n  }\n\n  insertItem(child: any, content: any): void {\n    content = typeof content === 'string' ? content : content.getContent();\n    const i = this.getItemIndex(child);\n    if (!~i) return;\n    if (i >= this.items.length) return this.appendItem(content);\n    const item = this.createItem(content);\n    for (let j = i; j < this.items.length; j++) {\n      this.items[j].position.top++;\n    }\n    item.position.top = i + (!this.screen.autoPadding ? 1 : 0);\n    this.ritems.splice(i, 0, content);\n    this.items.splice(i, 0, item);\n    this.append(item);\n    if (i === this.selected) {\n      this.select(i + 1);\n    }\n    this.emit('insert item');\n  }\n\n  getItem(child: any): any {\n    return this.items[this.getItemIndex(child)];\n  }\n\n  setItem(child: any, content: any): void {\n    content = typeof content === 'string' ? content : content.getContent();\n    const i = this.getItemIndex(child);\n    if (!~i) return;\n    this.items[i].setContent(content);\n    this.ritems[i] = content;\n  }\n\n  clearItems(): void {\n    return this.setItems([]);\n  }\n\n  setItems(items: string[]): void {\n    const original = this.items.slice();\n    const selected = this.selected;\n    const sel = this.ritems[this.selected];\n    let i = 0;\n\n    items = items.slice();\n    this.select(0);\n\n    for (; i < items.length; i++) {\n      if (this.items[i]) {\n        this.items[i].setContent(items[i]);\n      } else {\n        this.add(items[i]);\n      }\n    }\n\n    for (; i < original.length; i++) {\n      this.remove(original[i]);\n    }\n\n    this.ritems = items;\n\n    // Try to find our old item if it still exists.\n    const newSel = items.indexOf(sel);\n    if (~newSel) {\n      this.select(newSel);\n    } else if (items.length === original.length) {\n      this.select(selected);\n    } else {\n      this.select(Math.min(selected, items.length - 1));\n    }\n\n    this.emit('set items');\n  }\n\n  pushItem(content: any): number {\n    this.appendItem(content);\n    return this.items.length;\n  }\n\n  popItem(): any {\n    return this.removeItem(this.items.length - 1);\n  }\n\n  unshiftItem(content: any): number {\n    this.insertItem(0, content);\n    return this.items.length;\n  }\n\n  shiftItem(): any {\n    return this.removeItem(0);\n  }\n\n  spliceItem(child: any, n: number, ...items: any[]): any[] {\n    let i = this.getItemIndex(child);\n    if (!~i) return [];\n    const removed: any[] = [];\n    while (n--) {\n      removed.push(this.removeItem(i));\n    }\n    items.forEach(item => {\n      this.insertItem(i++, item);\n    });\n    return removed;\n  }\n\n  find(search: string | RegExp | Function, back?: boolean): number {\n    return this.fuzzyFind(search, back);\n  }\n\n  fuzzyFind(search: any, back?: boolean): number {\n    const start = this.selected + (back ? -1 : 1);\n    let i: number;\n\n    if (typeof search === 'number') search += '';\n\n    if (\n      search &&\n      typeof search === 'string' &&\n      search[0] === '/' &&\n      search[search.length - 1] === '/'\n    ) {\n      try {\n        search = new RegExp(search.slice(1, -1));\n      } catch (e) {}\n    }\n\n    const test =\n      typeof search === 'string'\n        ? (item: string) => {\n            return !!~item.indexOf(search as string);\n          }\n        : (search as any).test\n          ? (search as any).test.bind(search)\n          : search;\n\n    if (typeof test !== 'function') {\n      if (this.screen.options.debug) {\n        throw new Error('fuzzyFind(): `test` is not a function.');\n      }\n      return this.selected;\n    }\n\n    if (!back) {\n      for (i = start; i < this.ritems.length; i++) {\n        if (test(helpers.cleanTags(this.ritems[i]))) return i;\n      }\n      for (i = 0; i < start; i++) {\n        if (test(helpers.cleanTags(this.ritems[i]))) return i;\n      }\n    } else {\n      for (i = start; i >= 0; i--) {\n        if (test(helpers.cleanTags(this.ritems[i]))) return i;\n      }\n      for (i = this.ritems.length - 1; i > start; i--) {\n        if (test(helpers.cleanTags(this.ritems[i]))) return i;\n      }\n    }\n\n    return this.selected;\n  }\n\n  getItemIndex(child: any): number {\n    if (typeof child === 'number') {\n      return child;\n    } else if (typeof child === 'string') {\n      let i = this.ritems.indexOf(child);\n      if (~i) return i;\n      for (i = 0; i < this.ritems.length; i++) {\n        if (helpers.cleanTags(this.ritems[i]) === child) {\n          return i;\n        }\n      }\n      return -1;\n    } else {\n      return this.items.indexOf(child);\n    }\n  }\n\n  // Use parent ScrollableBox scrollTo implementation\n  scrollTo(offset: number, always?: boolean): any {\n    return super.scrollTo(offset, always);\n  }\n\n  select = (index: any): void => {\n    if (!this.interactive) {\n      return;\n    }\n\n    if (!this.items.length) {\n      this.selected = 0;\n      this.value = '';\n      if (this.scrollTo) this.scrollTo(0);\n      return;\n    }\n\n    if (typeof index === 'object') {\n      index = this.items.indexOf(index);\n    }\n\n    if (index < 0) {\n      index = 0;\n    } else if (index >= this.items.length) {\n      index = this.items.length - 1;\n    }\n\n    if (this.selected === index && this._listInitialized) return;\n    this._listInitialized = true;\n\n    this.selected = index;\n    this.value = helpers.cleanTags(this.ritems[this.selected]);\n    if (!this.parent) return;\n    if (this.scrollTo && typeof this.scrollTo === 'function') {\n      this.scrollTo(this.selected);\n    }\n\n    this.items.forEach((item: any) => {\n      if (item.clearPos) {\n        item.clearPos();\n      }\n    });\n\n    this.emit('select item', this.items[this.selected], this.selected);\n  };\n\n  move = (offset: number): void => {\n    this.select(this.selected + offset);\n  };\n\n  up = (offset?: number): void => {\n    this.move(-(offset || 1));\n  };\n\n  down = (offset?: number): void => {\n    this.move(offset || 1);\n  };\n\n  pick(label: any, callback?: Function): void {\n    if (!callback) {\n      callback = label;\n      label = null;\n    }\n\n    if (!this.interactive) {\n      return callback!();\n    }\n\n    const focused = this.screen.focused;\n    if (focused && (focused as any)._done) (focused as any)._done('stop');\n    this.screen.saveFocus();\n\n    this.focus();\n    this.show();\n    this.select(0);\n    if (label) this.setLabel(label);\n    this.screen.render();\n    this.once('action', (el: any, selected: number) => {\n      if (label) this.removeLabel();\n      this.screen.restoreFocus();\n      this.hide();\n      this.screen.render();\n      if (!el) return callback!();\n      return callback!(null, helpers.cleanTags(this.ritems[selected]));\n    });\n  }\n\n  enterSelected(i?: number): void {\n    if (i != null) this.select(i);\n    this.emit('action', this.items[this.selected], this.selected);\n    this.emit('select', this.items[this.selected], this.selected);\n  }\n\n  cancelSelected(i?: number): void {\n    if (i != null) this.select(i);\n    this.emit('action');\n    this.emit('cancel');\n  }\n}\n\n/**\n * Factory function for backward compatibility\n */\nfunction list(options?: any): List {\n  return new List(options);\n}\n\n// Add legacy method aliases to List prototype for backward compatibility\nList.prototype.remove = function (index: number) {\n  if (typeof index === 'number') {\n    const item = this.items[index];\n    if (item) {\n      this.removeItem(item);\n    }\n  }\n  return this;\n};\n\nList.prototype.clear = function () {\n  this.clearItems();\n  return this;\n};\n\n// Attach the class as a property for direct access\nlist.List = List;\n\n/**\n * Expose\n */\n\nexport default list;\n","/**\n * form.js - form element for blessed\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\n/**\n * Modules\n */\n\nimport Node from './node.js';\nimport boxFactory from './box.js';\nconst Box = boxFactory.Box;\n\n/**\n * Type definitions\n */\n\ninterface FormOptions {\n  keys?: boolean;\n  autoNext?: boolean;\n  vi?: boolean;\n  ignoreKeys?: boolean;\n  [key: string]: any;\n}\n\ninterface FormKey {\n  name: string;\n  shift?: boolean;\n}\n\ninterface FormElement {\n  type: string;\n  name?: string;\n  value?: any;\n  keyable?: boolean;\n  visible: boolean;\n  children: FormElement[];\n  emit(event: string, ...args: any[]): boolean;\n  focus(): void;\n  select?: (index: number) => void;\n  clearInput?: () => void;\n  setProgress?: (progress: number) => void;\n  refresh?: (cwd: string) => void;\n  uncheck?: () => void;\n  write?: (data: string) => void;\n  options?: { cwd?: string };\n}\n\ninterface FormScreen {\n  focused: FormElement | null;\n  _listenKeys(form: FormInterface): void;\n}\n\ninterface FormSubmission {\n  [key: string]: any;\n}\n\ninterface FormInterface extends Box {\n  type: string;\n  screen: FormScreen;\n  children: FormElement[];\n  _children?: FormElement[];\n  _selected?: FormElement | null;\n  submission?: FormSubmission;\n  on(event: string, listener: (...args: any[]) => void): void;\n  emit(event: string, ...args: any[]): boolean;\n  focus(): void;\n  _refresh(): void;\n  _visible(): boolean;\n  next(): FormElement | undefined;\n  previous(): FormElement | undefined;\n  focusNext(): void;\n  focusPrevious(): void;\n  resetSelected(): void;\n  focusFirst(): void;\n  focusLast(): void;\n  submit(): FormSubmission;\n  cancel(): void;\n  reset(): void;\n}\n\n/**\n * Form - Modern ES6 Class\n */\n\nclass Form extends Box {\n  type = 'form';\n  _children?: FormElement[];\n  _selected?: FormElement | null = null;\n  submission?: FormSubmission;\n\n  constructor(options?: FormOptions) {\n    // Handle malformed options gracefully\n    if (!options || typeof options !== 'object' || Array.isArray(options)) {\n      options = {};\n    }\n\n    // Force ignoreKeys to true for forms\n    options.ignoreKeys = true;\n    // Disable ScrollableBox mixin to avoid circular dependency issues\n    options.scrollable = false;\n\n    super(options);\n\n    // Set up key handling if requested\n    if (options.keys && this.screen) {\n      this.screen._listenKeys(this);\n      this.on(\n        'element keypress',\n        (el: FormElement, ch: string, key: FormKey) => {\n          if (\n            (key.name === 'tab' && !key.shift) ||\n            (el.type === 'textbox' &&\n              options!.autoNext &&\n              key.name === 'enter') ||\n            key.name === 'down' ||\n            (options!.vi && key.name === 'j')\n          ) {\n            if (el.type === 'textbox' || el.type === 'textarea') {\n              if (key.name === 'j') return;\n              if (key.name === 'tab') {\n                // Workaround, since we can't stop the tab from being added.\n                el.emit('keypress', null, { name: 'backspace' });\n              }\n              el.emit('keypress', '\\x1b', { name: 'escape' });\n            }\n            this.focusNext();\n            return;\n          }\n\n          if (\n            (key.name === 'tab' && key.shift) ||\n            key.name === 'up' ||\n            (options!.vi && key.name === 'k')\n          ) {\n            if (el.type === 'textbox' || el.type === 'textarea') {\n              if (key.name === 'k') return;\n              el.emit('keypress', '\\x1b', { name: 'escape' });\n            }\n            this.focusPrevious();\n            return;\n          }\n\n          if (key.name === 'escape') {\n            this.focus();\n            return;\n          }\n        }\n      );\n    }\n  }\n\n  _refresh(): void {\n    // XXX Possibly remove this if statement and refresh on every focus.\n    // Also potentially only include *visible* focusable elements.\n    // This would remove the need to check for _selected.visible in previous()\n    // and next().\n    if (!this._children) {\n      const out: FormElement[] = [];\n\n      this.children.forEach(function fn(el: FormElement) {\n        if (el.keyable) out.push(el);\n        el.children.forEach(fn);\n      });\n\n      this._children = out;\n    }\n  }\n\n  _visible(): boolean {\n    return !!this._children!.filter(function (el: FormElement) {\n      return el.visible;\n    }).length;\n  }\n\n  next(): FormElement | undefined {\n    this._refresh();\n\n    if (!this._visible()) return;\n\n    if (!this._selected) {\n      this._selected = this._children![0];\n      if (!this._selected.visible) return this.next();\n      if (this.screen.focused !== this._selected) return this._selected;\n    }\n\n    const i = this._children!.indexOf(this._selected);\n    if (!~i || !this._children![i + 1]) {\n      this._selected = this._children![0];\n      if (!this._selected.visible) return this.next();\n      return this._selected;\n    }\n\n    this._selected = this._children![i + 1];\n    if (!this._selected.visible) return this.next();\n    return this._selected;\n  }\n\n  previous(): FormElement | undefined {\n    this._refresh();\n\n    if (!this._visible()) return;\n\n    if (!this._selected) {\n      this._selected = this._children![this._children!.length - 1];\n      if (!this._selected.visible) return this.previous();\n      if (this.screen.focused !== this._selected) return this._selected;\n    }\n\n    const i = this._children!.indexOf(this._selected);\n    if (!~i || !this._children![i - 1]) {\n      this._selected = this._children![this._children!.length - 1];\n      if (!this._selected.visible) return this.previous();\n      return this._selected;\n    }\n\n    this._selected = this._children![i - 1];\n    if (!this._selected.visible) return this.previous();\n    return this._selected;\n  }\n\n  focusNext(): void {\n    const next = this.next();\n    if (next) next.focus();\n  }\n\n  focusPrevious(): void {\n    const previous = this.previous();\n    if (previous) previous.focus();\n  }\n\n  resetSelected(): void {\n    this._selected = null;\n  }\n\n  focusFirst(): void {\n    this.resetSelected();\n    this.focusNext();\n  }\n\n  focusLast(): void {\n    this.resetSelected();\n    this.focusPrevious();\n  }\n\n  submit(): FormSubmission {\n    const out: FormSubmission = {};\n\n    this.children.forEach(function fn(el: FormElement) {\n      if (el.value != null) {\n        const name = el.name || el.type;\n        if (Array.isArray(out[name])) {\n          out[name].push(el.value);\n        } else if (out[name]) {\n          out[name] = [out[name], el.value];\n        } else {\n          out[name] = el.value;\n        }\n      }\n      el.children.forEach(fn);\n    });\n\n    this.emit('submit', out);\n\n    return (this.submission = out);\n  }\n\n  cancel(): void {\n    this.emit('cancel');\n  }\n\n  reset(): void {\n    this.children.forEach(function fn(el: FormElement) {\n      switch (el.type) {\n        case 'screen':\n          break;\n        case 'box':\n          break;\n        case 'text':\n          break;\n        case 'line':\n          break;\n        case 'scrollable-box':\n          break;\n        case 'list':\n          el.select!(0);\n          return;\n        case 'form':\n          break;\n        case 'input':\n          break;\n        case 'textbox':\n          el.clearInput!();\n          return;\n        case 'textarea':\n          el.clearInput!();\n          return;\n        case 'button':\n          delete el.value;\n          break;\n        case 'progress-bar':\n          el.setProgress!(0);\n          break;\n        case 'file-manager':\n          el.refresh!(el.options!.cwd!);\n          return;\n        case 'checkbox':\n          el.uncheck!();\n          return;\n        case 'radio-set':\n          break;\n        case 'radio-button':\n          el.uncheck!();\n          return;\n        case 'prompt':\n          break;\n        case 'question':\n          break;\n        case 'message':\n          break;\n        case 'info':\n          break;\n        case 'loading':\n          break;\n        case 'list-bar':\n          //el.select(0);\n          break;\n        case 'dir-manager':\n          el.refresh!(el.options!.cwd!);\n          return;\n        case 'terminal':\n          el.write!('');\n          return;\n        case 'image':\n          //el.clearImage();\n          return;\n      }\n      el.children.forEach(fn);\n    });\n\n    this.emit('reset');\n  }\n}\n\n/**\n * Factory function for backward compatibility\n */\nfunction form(options?: FormOptions): FormInterface {\n  return new Form(options) as FormInterface;\n}\n\n// Attach the class as a property for direct access\nform.Form = Form;\n\n/**\n * Expose\n */\n\nexport default form;\n","/**\n * input.js - abstract input element for blessed\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\n/**\n * Modules\n */\n\nimport Node from './node.js';\nimport boxFactory from './box.js';\nconst Box = boxFactory.Box;\n\n/**\n * Type definitions\n */\n\nexport interface InputOptions {\n  [key: string]: any;\n}\n\ninterface InputInterface extends Box {\n  type: string;\n}\n\n/**\n * Input - Modern ES6 Class\n */\n\nclass Input extends Box {\n  type = 'input';\n\n  constructor(options?: InputOptions) {\n    // Handle malformed options gracefully\n    if (!options || typeof options !== 'object' || Array.isArray(options)) {\n      options = {};\n    }\n\n    super(options);\n  }\n}\n\n/**\n * Factory function for backward compatibility\n */\nfunction input(options?: InputOptions): InputInterface {\n  return new Input(options) as InputInterface;\n}\n\n// Attach the class as a property for direct access\ninput.Input = Input;\n\n/**\n * Expose\n */\n\nexport default input;\n","/**\n * textarea.js - textarea element for blessed\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\n/**\n * Modules\n */\n\nimport unicode from '../unicode.js';\nimport Node from './node.js';\nimport inputFactory from './input.js';\nconst Input = inputFactory.Input;\nimport scrollableTextFactory from './scrollabletext.js';\nconst ScrollableText = scrollableTextFactory.ScrollableText;\n\nvar nextTick = global.setImmediate || process.nextTick.bind(process);\n\n/**\n * Interfaces\n */\n\nexport interface TextareaOptions {\n  scrollable?: boolean;\n  value?: string;\n  inputOnFocus?: boolean;\n  keys?: boolean;\n  vi?: boolean;\n  mouse?: boolean;\n  [key: string]: any;\n}\n\nexport interface CursorPosition {\n  x: number;\n  y: number;\n}\n\nexport interface KeyData {\n  name: string;\n  ctrl?: boolean;\n  shift?: boolean;\n  meta?: boolean;\n}\n\ninterface MouseData {\n  button?: string;\n  x: number;\n  y: number;\n}\n\ninterface TextareaScreen {\n  focused: any;\n  program: {\n    x: number;\n    y: number;\n    showCursor(): void;\n    hideCursor(): void;\n    cuf(n: number): void;\n    cub(n: number): void;\n    cud(n: number): void;\n    cuu(n: number): void;\n    cup(y: number, x: number): void;\n  };\n  grabKeys: boolean;\n  fullUnicode: boolean;\n  saveFocus(): void;\n  restoreFocus(): void;\n  rewindFocus(): void;\n  render(): void;\n  readEditor(options: { value: string }, callback: Function): any;\n  _listenKeys(element: any): void;\n}\n\ninterface TextareaCoords {\n  xi: number;\n  xl: number;\n  yi: number;\n  yl: number;\n}\n\ninterface WrapResult {\n  real: string[];\n  fake: string[];\n  rtof: number[];\n  length: number;\n}\n\ninterface TextareaCLines {\n  real: string[];\n  fake: string[];\n  rtof: number[];\n  length: number;\n}\n\ninterface TextareaInterface extends Input {\n  type: string;\n  screen: TextareaScreen;\n  options: TextareaOptions;\n  offsetY: number;\n  offsetX: number;\n  value: string;\n  _value?: string;\n  _reading?: boolean;\n  _callback?: Function;\n  _done?: Function;\n  __listener?: Function;\n  __done?: Function;\n  __updateCursor: Function;\n  lpos?: TextareaCoords;\n  _clines: TextareaCLines;\n  childBase?: number;\n  iheight: number;\n  itop: number;\n  ileft: number;\n  iwidth: number;\n  width: number;\n\n  // Methods\n  getCursor(): CursorPosition;\n  setCursor(x: number, y: number): void;\n  moveCursor(x: number, y: number): void;\n  _updateCursor(get?: boolean): void;\n  input(callback?: Function): any;\n  setInput(callback?: Function): any;\n  readInput(callback?: Function): any;\n  _listener(ch: string, key: KeyData): void;\n  _typeScroll(): void;\n  getValue(): string;\n  setValue(value?: string): void;\n  clearInput(): any;\n  clearValue(): any;\n  submit(): any;\n  cancel(): any;\n  render(): any;\n  editor(callback?: Function): any;\n  setEditor(callback?: Function): any;\n  readEditor(callback?: Function): any;\n  _render(): any;\n  _getCoords(): TextareaCoords | null;\n  strWidth(str: string): number;\n  setContent(content: string): void;\n  setScroll(offset: number): void;\n  _wrapContent(content: string, width: number): WrapResult;\n  emit(event: string, ...args: any[]): any;\n  on(event: string, listener: Function): void;\n  removeListener(event: string, listener: Function): void;\n  focus(): void;\n}\n\n/**\n * Textarea - Modern ES6 Class\n */\n\nclass Textarea extends ScrollableText {\n  type = 'textarea';\n  offsetY: number;\n  offsetX: number;\n  value: string;\n  _value?: string;\n  _reading?: boolean;\n  _callback?: Function;\n  _done?: Function;\n  __listener?: Function;\n  __done?: Function;\n  __updateCursor: Function;\n\n  constructor(options?: TextareaOptions) {\n    // Handle malformed options gracefully\n    if (!options || typeof options !== 'object' || Array.isArray(options)) {\n      options = {};\n    }\n\n    // Textarea gets scrollability through ScrollableText inheritance\n\n    super(options);\n\n    this.screen._listenKeys(this);\n\n    this.offsetY = 0;\n    this.offsetX = 0;\n\n    this.value = options.value || '';\n\n    // Defer binding until after constructor completes to ensure method is available\n    setImmediate(() => {\n      if (typeof this._updateCursor === 'function') {\n        this.__updateCursor = this._updateCursor.bind(this);\n        this.on('resize', this.__updateCursor);\n        this.on('move', this.__updateCursor);\n      }\n    });\n\n    if (options.inputOnFocus) {\n      this.on('focus', this.readInput.bind(this, null));\n    }\n\n    if (!options.inputOnFocus && options.keys) {\n      this.on('keypress', (ch: string, key: KeyData) => {\n        if (this._reading) return;\n        if (key.name === 'enter' || (options.vi && key.name === 'i')) {\n          return this.readInput();\n        }\n        if (key.name === 'e') {\n          return this.readEditor();\n        }\n      });\n    }\n\n    if (options.mouse) {\n      this.on('click', (data: MouseData) => {\n        if (this._reading) return;\n        if (data.button !== 'right') return;\n        this.readEditor();\n      });\n    }\n  }\n\n  getCursor(): CursorPosition {\n    return { x: this.offsetX, y: this.offsetY };\n  }\n\n  setCursor(x: number, y: number): void {\n    this.offsetX = x;\n    this.offsetY = y;\n  }\n\n  moveCursor(x: number, y: number): void {\n    var prevLine = this._clines.length - 1 + this.offsetY;\n    let sync = false;\n    if (y <= 0 && y > this._clines.length * -1) {\n      sync = this.offsetY !== y;\n      this.offsetY = y;\n    }\n    var currentLine = this._clines.length - 1 + this.offsetY;\n    var currentText = this._clines[currentLine];\n\n    if (sync) {\n      var prevText = this._clines[prevLine];\n      var positionFromBegin = Math.max(\n        this.strWidth(prevText) + this.offsetX,\n        0\n      );\n      x = Math.max(0, this.strWidth(currentText) - positionFromBegin) * -1;\n    }\n    if (x <= 0 && x >= this.strWidth(currentText) * -1) {\n      this.offsetX = x;\n    }\n    this._updateCursor(true);\n    this.screen.render();\n  }\n\n  _updateCursor(get?: boolean): void {\n    if (this.screen.focused !== this) {\n      return;\n    }\n\n    var lpos = get ? this.lpos : this._getCoords();\n\n    if (!lpos) return;\n\n    const currentLine = this._clines.length - 1 + this.offsetY;\n    var currentText = this._clines[currentLine],\n      program = this.screen.program,\n      line,\n      cx,\n      cy;\n\n    // Stop a situation where the textarea begins scrolling\n    // and the last cline appears to always be empty from the\n    // _typeScroll `+ '\\n'` thing.\n    // Maybe not necessary anymore?\n    if (currentText === '' && this.value[this.value.length - 1] !== '\\n') {\n      //currentText = this._clines[currentLine - 1] || '';\n    }\n\n    line = Math.min(\n      currentLine - (this.childBase || 0),\n      lpos.yl - lpos.yi - this.iheight - 1\n    );\n\n    // When calling clearValue() on a full textarea with a border, the first\n    // argument in the above Math.min call ends up being -2. Make sure we stay\n    // positive.\n    line = Math.max(0, line);\n\n    cy = lpos.yi + this.itop + line;\n    cx = this.offsetX + lpos.xi + this.ileft + this.strWidth(currentText);\n\n    // XXX Not sure, but this may still sometimes\n    // cause problems when leaving editor.\n    if (cy === program.y && cx === program.x) {\n      return;\n    }\n\n    if (cy === program.y) {\n      if (cx > program.x) {\n        program.cuf(cx - program.x);\n      } else if (cx < program.x) {\n        program.cub(program.x - cx);\n      }\n    } else if (cx === program.x) {\n      if (cy > program.y) {\n        program.cud(cy - program.y);\n      } else if (cy < program.y) {\n        program.cuu(program.y - cy);\n      }\n    } else {\n      program.cup(cy, cx);\n    }\n  }\n\n  input(callback?: Function): any {\n    return this.readInput(callback);\n  }\n\n  setInput(callback?: Function): any {\n    return this.readInput(callback);\n  }\n\n  readInput(callback?: Function): any {\n    var focused = this.screen.focused === this;\n\n    if (this._reading) return;\n    this._reading = true;\n\n    this._callback = callback;\n\n    if (!focused) {\n      this.screen.saveFocus();\n      this.focus();\n    }\n\n    this.screen.grabKeys = true;\n\n    this._updateCursor();\n    this.screen.program.showCursor();\n    //this.screen.program.sgr('normal');\n\n    this._done = (err?: any, value?: string) => {\n      if (!this._reading) return;\n\n      if ((this._done as any).done) return;\n      (this._done as any).done = true;\n\n      this._reading = false;\n\n      delete this._callback;\n      delete this._done;\n\n      this.removeListener('keypress', this.__listener);\n      delete this.__listener;\n\n      this.removeListener('blur', this.__done);\n      delete this.__done;\n\n      this.screen.program.hideCursor();\n      this.screen.grabKeys = false;\n\n      if (!focused) {\n        this.screen.restoreFocus();\n      }\n\n      if (this.options.inputOnFocus) {\n        this.screen.rewindFocus();\n      }\n\n      // Ugly\n      if (err === 'stop') return;\n\n      if (err) {\n        this.emit('error', err);\n      } else if (value != null) {\n        this.emit('submit', value);\n      } else {\n        this.emit('cancel', value);\n      }\n      this.emit('action', value);\n\n      if (!callback) return;\n\n      return err ? callback(err) : callback(null, value);\n    };\n\n    // Put this in a nextTick so the current\n    // key event doesn't trigger any keys input.\n    nextTick(() => {\n      this.__listener = this._listener.bind(this);\n      this.on('keypress', this.__listener);\n    });\n\n    this.__done = this._done.bind(this, null, null);\n    this.on('blur', this.__done);\n  }\n\n  _listener(ch: string, key: KeyData): void {\n    var done = this._done,\n      value = this.value;\n\n    if (key.name === 'return') return;\n    if (key.name === 'enter') {\n      ch = '\\n';\n    }\n    const cursor = this.getCursor();\n\n    // TODO: Handle directional keys.\n    if (\n      key.name === 'left' ||\n      key.name === 'right' ||\n      key.name === 'up' ||\n      key.name === 'down' ||\n      key.name === 'end' ||\n      key.name === 'home'\n    ) {\n      if (key.name === 'left') {\n        cursor.x--;\n      } else if (key.name === 'right') {\n        cursor.x++;\n      }\n      if (key.name === 'up') {\n        cursor.y--;\n      } else if (key.name === 'down') {\n        cursor.y++;\n      }\n\n      if (key.name === 'end') {\n        cursor.x = 0;\n      } else if (key.name === 'home') {\n        const currentLine = this._clines.length - 1 + this.offsetY;\n        const currentLineLength = this.strWidth(\n          this._clines[currentLine] ?? ''\n        );\n        cursor.x = -currentLineLength;\n      }\n\n      this.moveCursor(cursor.x, cursor.y);\n    }\n\n    if (this.options.keys && key.ctrl && key.name === 'e') {\n      return this.readEditor();\n    }\n\n    // TODO: Optimize typing by writing directly\n    // to the screen and screen buffer here.\n    if (key.name === 'escape') {\n      done(null, null);\n    } else if (key.name === 'backspace') {\n      if (this.value.length) {\n        if (this.screen.fullUnicode) {\n        } else {\n          if (cursor.x === 0 && cursor.y === 0) {\n            this.value = this.value.slice(0, -1);\n          } else {\n            const realLines = this._clines.real.slice();\n            const fakeLines = this._clines.fake.slice();\n            const mapper = this._clines.rtof;\n\n            const currentLine = realLines.length - 1 + cursor.y;\n\n            const fakeLineIndex = mapper[currentLine];\n\n            let fakeCursorPosition = 0;\n            for (let i = 0; i <= currentLine; i++) {\n              if (mapper[i] === fakeLineIndex) {\n                fakeCursorPosition += this.strWidth(realLines[i]);\n              }\n            }\n            fakeCursorPosition += cursor.x;\n\n            let realCursorPosition =\n              this.strWidth(realLines[currentLine]) + cursor.x;\n\n            if (fakeLines[fakeLineIndex] === '') {\n              fakeLines.splice(fakeLineIndex, 1);\n            } else if (cursor.x === -this.strWidth(realLines[currentLine])) {\n              if (currentLine > 0) {\n                const lineLengthBefore = this.strWidth(\n                  realLines[currentLine - 1] ?? ''\n                );\n\n                if (mapper[currentLine] !== mapper[currentLine - 1]) {\n                  const currentLineString = fakeLines.splice(fakeLineIndex, 1);\n                  fakeLines[fakeLineIndex - 1] += currentLineString;\n                } else {\n                }\n\n                const predict = this._wrapContent(\n                  fakeLines.join('\\n'),\n                  this.width - this.iwidth\n                );\n\n                cursor.x = -(\n                  this.strWidth(predict[currentLine - 1] ?? '') -\n                  lineLengthBefore\n                );\n                if (predict.real.length === realLines.length) {\n                  cursor.y--;\n                }\n              }\n            } else {\n              fakeLines[fakeLineIndex] =\n                fakeLines[fakeLineIndex].slice(0, fakeCursorPosition - 1) +\n                fakeLines[fakeLineIndex].slice(fakeCursorPosition);\n              const predict = this._wrapContent(\n                fakeLines.join('\\n'),\n                this.width - this.iwidth\n              );\n              cursor.x = -(\n                this.strWidth(predict.real[currentLine]) -\n                realCursorPosition +\n                1\n              );\n              if (predict.real.length !== realLines.length) {\n                cursor.y++;\n              }\n            }\n            this.value = fakeLines.join('\\n');\n            this.setCursor(cursor.x, cursor.y);\n          }\n        }\n      }\n    } else if (key.name === 'delete') {\n      if (this.value.length) {\n        if (this.screen.fullUnicode) {\n        } else {\n          const currentLine = this._clines.length - 1 + cursor.y;\n          if (cursor.x === 0 && cursor.y === 0) {\n          } else {\n            const realLines = this._clines.real.slice();\n            const fakeLines = this._clines.fake.slice();\n            const mapper = this._clines.rtof;\n\n            const currentLine = realLines.length - 1 + cursor.y;\n\n            const fakeLineIndex = mapper[currentLine];\n\n            let fakeCursorPosition = 0;\n            for (let i = 0; i <= currentLine; i++) {\n              if (mapper[i] === fakeLineIndex) {\n                fakeCursorPosition += this.strWidth(realLines[i]);\n              }\n            }\n            fakeCursorPosition += cursor.x;\n\n            let realCursorPosition =\n              this.strWidth(realLines[currentLine]) + cursor.x;\n\n            if (fakeLines[fakeLineIndex] === '') {\n              const nextLineLength = this.strWidth(\n                fakeLines[fakeLineIndex + 1] ?? ''\n              );\n              fakeLines.splice(fakeLineIndex, 1);\n              cursor.y++;\n              cursor.x = -nextLineLength;\n            } else {\n              if (fakeLineIndex < fakeLines.length - 1) {\n                if (cursor.x === -this.strWidth(realLines[currentLine])) {\n                  fakeLines[fakeLineIndex] =\n                    fakeLines[fakeLineIndex].substring(1);\n                } else {\n                  fakeLines[fakeLineIndex] =\n                    fakeLines[fakeLineIndex].slice(0, fakeCursorPosition) +\n                    fakeLines[fakeLineIndex].slice(fakeCursorPosition + 1);\n                }\n                const predict = this._wrapContent(\n                  fakeLines.join('\\n'),\n                  this.width - this.iwidth\n                );\n                cursor.x = -(\n                  this.strWidth(predict.real[currentLine]) - realCursorPosition\n                );\n                if (predict.real.length !== realLines.length) {\n                  cursor.y++;\n                }\n              }\n            }\n            this.value = fakeLines.join('\\n');\n            this.setCursor(cursor.x, cursor.y);\n          }\n        }\n      }\n    } else if (ch) {\n      if (!/^[\\x00-\\x08\\x0b-\\x0c\\x0e-\\x1f\\x7f]$/.test(ch)) {\n        if (cursor.x === 0 && cursor.y === 0) {\n          this.value += ch;\n        } else if (cursor.x >= this.value.length * -1) {\n          const realLines = this._clines.real.slice();\n          const fakeLines = this._clines.fake.slice();\n          const mapper = this._clines.rtof;\n\n          const currentLine = realLines.length - 1 + cursor.y;\n\n          const fakeLineIndex = mapper[currentLine];\n          let fakeCursorPosition = 0;\n          for (let i = 0; i <= currentLine; i++) {\n            if (mapper[i] === fakeLineIndex) {\n              fakeCursorPosition += this.strWidth(realLines[i]);\n            }\n          }\n          fakeCursorPosition += cursor.x;\n\n          fakeLines[fakeLineIndex] =\n            fakeLines[fakeLineIndex].slice(0, fakeCursorPosition) +\n            ch +\n            fakeLines[fakeLineIndex].slice(fakeCursorPosition);\n\n          const predict = this._wrapContent(\n            fakeLines.join('\\n'),\n            this.width - this.iwidth\n          );\n          if (ch === '\\n') {\n            if (predict.real.length === realLines.length) {\n              cursor.y++;\n            }\n            cursor.x = -this.strWidth(predict[predict.length - 1 + cursor.y]);\n          }\n\n          this.value = fakeLines.join('\\n');\n          this.setCursor(cursor.x, cursor.y);\n        }\n      }\n    }\n\n    if (this.value !== value) {\n      this.screen.render();\n    }\n  }\n\n  _typeScroll(): void {\n    // XXX Workaround\n    //var height = this.height - this.iheight;\n    //if (this._clines.length - this.childBase > height) {\n    const currentLine = this._clines.length - 1 + this.offsetY;\n    this.setScroll(currentLine);\n    //}\n  }\n\n  getValue(): string {\n    return this.value;\n  }\n\n  setValue(value?: string): void {\n    if (value == null) {\n      value = this.value;\n    }\n    if (this._value !== value) {\n      this.value = value;\n      this._value = value;\n      this.setContent(this.value);\n      this._typeScroll();\n      this._updateCursor();\n    }\n  }\n\n  clearInput(): any {\n    return this.setValue('');\n  }\n\n  clearValue(): any {\n    return this.setValue('');\n  }\n\n  submit(): any {\n    if (!this.__listener) return;\n    return this.__listener('\\x1b', { name: 'escape' });\n  }\n\n  cancel(): any {\n    if (!this.__listener) return;\n    return this.__listener('\\x1b', { name: 'escape' });\n  }\n\n  render(): any {\n    this.setValue();\n    return this._render();\n  }\n\n  editor(callback?: Function): any {\n    return this.readEditor(callback);\n  }\n\n  setEditor(callback?: Function): any {\n    return this.readEditor(callback);\n  }\n\n  readEditor(callback?: Function): any {\n    if (this._reading) {\n      var _cb = this._callback,\n        cb = callback;\n\n      this._done('stop');\n\n      callback = function (err?: any, value?: string) {\n        if (_cb) _cb(err, value);\n        if (cb) cb(err, value);\n      };\n    }\n\n    if (!callback) {\n      callback = function () {};\n    }\n\n    return this.screen.readEditor(\n      { value: this.value },\n      (err?: any, value?: string) => {\n        if (err) {\n          if (err.message === 'Unsuccessful.') {\n            this.screen.render();\n            return this.readInput(callback);\n          }\n          this.screen.render();\n          this.readInput(callback);\n          return callback(err);\n        }\n        this.setValue(value);\n        this.screen.render();\n        return callback(null, value);\n      }\n    );\n  }\n}\n\n/**\n * Factory function for backward compatibility\n */\nfunction textarea(options?: TextareaOptions): TextareaInterface {\n  return new Textarea(options) as TextareaInterface;\n}\n\n// Attach the class as a property for direct access\ntextarea.Textarea = Textarea;\n\n/**\n * Expose\n */\n\nexport default textarea;\n","/**\n * textbox.js - textbox element for blessed\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\n/**\n * Modules\n */\n\nimport Node from './node.js';\nimport textareaFactory from './textarea.js';\nconst Textarea = textareaFactory.Textarea;\n\n/**\n * Type definitions\n */\n\ninterface TextboxOptions {\n  scrollable?: boolean;\n  secret?: boolean;\n  censor?: boolean;\n  ignoreKeys?: string[]; // Array of key names to ignore (e.g., ['tab', 'f1'])\n  [key: string]: any;\n}\n\ninterface TextboxKey {\n  name: string;\n}\n\ninterface TextboxScreen {\n  tabc: string;\n}\n\ninterface TextboxInterface extends Textarea {\n  type: string;\n  secret?: boolean;\n  censor?: boolean;\n  ignoreKeys?: string[];\n  value: string;\n  _value: string;\n  width: number;\n  iwidth: number;\n  screen: TextboxScreen;\n  __listener?: (ch: string, key: TextboxKey) => void;\n  __olistener: (ch: string, key: TextboxKey) => any;\n  _listener: (ch: string, key: TextboxKey) => any;\n  _done: (err: any, value?: string) => void;\n  setContent(content: string): void;\n  _updateCursor(): void;\n  setValue(value?: string): void;\n  submit(): any;\n}\n\n/**\n * Textbox - Modern ES6 Class\n */\n\nclass Textbox extends Textarea {\n  type = 'textbox';\n  secret?: boolean;\n  censor?: boolean;\n  ignoreKeys?: string[];\n  __olistener: (ch: string, key: TextboxKey) => any;\n\n  constructor(options?: TextboxOptions) {\n    // Handle malformed options gracefully\n    if (!options || typeof options !== 'object' || Array.isArray(options)) {\n      options = {};\n    }\n\n    // Force scrollable to false for textbox (single-line input)\n    options.scrollable = false;\n\n    super(options);\n\n    this.secret = options.secret;\n    this.censor = options.censor;\n    this.ignoreKeys = options.ignoreKeys || [];\n  }\n\n  // Override _listener to handle textbox-specific behavior\n  _listener(ch: string, key: TextboxKey): void {\n    // Check if this key should be ignored based on configuration\n    if (this.ignoreKeys && this.ignoreKeys.length > 0) {\n      // Check by key name\n      if (key.name && this.ignoreKeys.includes(key.name)) {\n        return; // Ignore this key\n      }\n\n      // Also check by character for special chars like tab\n      if (ch) {\n        // Map common special characters to their key names\n        const charToKeyName: { [key: string]: string } = {\n          '\\t': 'tab',\n          '\\x1b': 'escape',\n          '\\r': 'return',\n          '\\n': 'enter',\n        };\n\n        const keyName = charToKeyName[ch];\n        if (keyName && this.ignoreKeys.includes(keyName)) {\n          return; // Ignore this character\n        }\n      }\n    }\n\n    // Handle enter key for single-line submission (after ignore check)\n    if (key.name === 'enter') {\n      if (this._done) {\n        this._done(null, this.value);\n      }\n      return;\n    }\n\n    // Handle backspace for single-line textbox\n    if (key.name === 'backspace') {\n      if (this.value.length > 0) {\n        this.value = this.value.slice(0, -1);\n        this.setValue(this.value);\n      }\n      return;\n    }\n\n    // Handle delete key for single-line textbox\n    if (key.name === 'delete') {\n      // For single-line, delete removes character at cursor position\n      // Since we don't track cursor precisely, just remove from end for now\n      if (this.value.length > 0) {\n        this.value = this.value.slice(0, -1);\n        this.setValue(this.value);\n      }\n      return;\n    }\n\n    // For all other keys, call parent's textarea _listener\n    super._listener(ch, key);\n  }\n\n  setValue(value?: string): void {\n    let visible: number, val: string;\n    if (value == null) {\n      value = this.value;\n    }\n    if (this._value !== value) {\n      // Remove newlines for single-line textbox\n      value = value.replace(/\\n/g, '');\n      this.value = value;\n      this._value = value;\n      if (this.secret) {\n        this.setContent('');\n      } else if (this.censor) {\n        this.setContent(Array(this.value.length + 1).join('*'));\n      } else {\n        visible = -(this.width - this.iwidth - 1);\n        val = this.value.replace(/\\t/g, this.screen.tabc);\n        this.setContent(val.slice(visible));\n      }\n      this._updateCursor();\n    }\n  }\n\n  submit(): any {\n    if (!this._done) return;\n    return this._done(null, this.value);\n  }\n}\n\n/**\n * Factory function for backward compatibility\n */\nfunction textbox(options?: TextboxOptions): TextboxInterface {\n  return new Textbox(options) as TextboxInterface;\n}\n\n// Attach the class as a property for direct access\ntextbox.Textbox = Textbox;\n\n/**\n * Expose\n */\n\nexport default textbox;\n","/**\n * button.js - button element for blessed\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\n/**\n * Modules\n */\n\nimport Node from './node.js';\nimport inputFactory from './input.js';\nconst Input = inputFactory.Input;\n\n/**\n * Type definitions\n */\n\ninterface ButtonOptions {\n  autoFocus?: boolean;\n  mouse?: boolean;\n  [key: string]: any;\n}\n\ninterface ButtonKey {\n  name: string;\n}\n\ninterface ButtonInterface {\n  type: string;\n  options: ButtonOptions;\n  value?: boolean;\n  on(event: string, listener: (...args: any[]) => void): void;\n  emit(event: string, ...args: any[]): boolean;\n  focus(): void;\n  press(): boolean;\n  [key: string]: any;\n}\n\n/**\n * Button - Modern ES6 Class\n */\n\nclass Button extends Input {\n  type = 'button';\n  value?: boolean;\n\n  constructor(options?: ButtonOptions) {\n    // Handle malformed options gracefully\n    if (!options || typeof options !== 'object' || Array.isArray(options)) {\n      options = {};\n    }\n\n    // Set default autoFocus behavior\n    if (options.autoFocus == null) {\n      options.autoFocus = false;\n    }\n\n    super(options);\n\n    // Set up keypress handler for enter and space keys\n    this.on('keypress', (ch: string, key: ButtonKey) => {\n      if (key.name === 'enter' || key.name === 'space') {\n        return this.press();\n      }\n    });\n\n    // Set up mouse click handler if mouse is enabled\n    if (this.options.mouse) {\n      this.on('click', () => {\n        return this.press();\n      });\n    }\n  }\n\n  press(): boolean {\n    this.focus();\n    this.value = true;\n    const result = this.emit('press');\n    delete this.value;\n    return result;\n  }\n}\n\n/**\n * Factory function for backward compatibility\n */\nfunction button(options?: ButtonOptions): ButtonInterface {\n  return new Button(options) as ButtonInterface;\n}\n\n// Attach the class as a property for direct access\nbutton.Button = Button;\n\n/**\n * Expose\n */\n\nexport default button;\n","/**\n * progressbar.js - progress bar element for blessed\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\n/**\n * Modules\n */\n\nimport Node from './node.js';\nimport inputFactory from './input.js';\nconst Input = inputFactory.Input;\n\n/**\n * Type definitions\n */\n\ninterface ProgressBarOptions {\n  filled?: number | string;\n  pch?: string;\n  ch?: string;\n  bch?: string;\n  barFg?: string;\n  barBg?: string;\n  orientation?: 'horizontal' | 'vertical';\n  keys?: boolean;\n  mouse?: boolean;\n  vi?: boolean;\n  [key: string]: any;\n}\n\ninterface ProgressBarKey {\n  name: string;\n}\n\ninterface ProgressBarMouseData {\n  x: number;\n  y: number;\n}\n\ninterface ProgressBarPosition {\n  xi: number;\n  xl: number;\n  yi: number;\n  yl: number;\n}\n\ninterface ProgressBarScreen {\n  render(): void;\n  fillRegion(\n    attr: any,\n    ch: string,\n    x1: number,\n    x2: number,\n    y1: number,\n    y2: number\n  ): void;\n  lines: Array<{ dirty?: boolean; [index: number]: [any, string] }>;\n}\n\ninterface ProgressBarInterface extends Input {\n  type: string;\n  filled: number;\n  value: number;\n  pch: string;\n  ch: string;\n  orientation: 'horizontal' | 'vertical';\n  style: {\n    bar?: {\n      fg?: string;\n      bg?: string;\n    };\n  };\n  lpos?: ProgressBarPosition;\n  iwidth: number;\n  iheight: number;\n  border?: boolean;\n  content?: string;\n  screen: ProgressBarScreen;\n  on(event: string, listener: (...args: any[]) => void): void;\n  emit(event: string, ...args: any[]): boolean;\n  _render(): ProgressBarPosition | null;\n  sattr(style: any): any;\n  progress(filled: number): void;\n  setProgress(filled: number): void;\n  reset(): void;\n}\n\n/**\n * ProgressBar - Modern ES6 Class\n */\n\nclass ProgressBar extends Input {\n  type = 'progress-bar';\n  filled: number;\n  value: number;\n  pch: string;\n  orientation: 'horizontal' | 'vertical';\n\n  constructor(options?: ProgressBarOptions) {\n    // Handle malformed options gracefully\n    if (!options || typeof options !== 'object' || Array.isArray(options)) {\n      options = {};\n    }\n\n    super(options);\n\n    this.filled = options.filled || 0;\n    if (typeof this.filled === 'string') {\n      this.filled = +(this.filled as string).slice(0, -1);\n    }\n    this.value = this.filled;\n\n    this.pch = options.pch || ' ';\n\n    // XXX Workaround that predates the usage of `el.ch`.\n    if (options.ch) {\n      this.pch = options.ch;\n      this.ch = ' ';\n    }\n    if (options.bch) {\n      this.ch = options.bch;\n    }\n\n    if (!this.style.bar) {\n      this.style.bar = {};\n      this.style.bar.fg = options.barFg;\n      this.style.bar.bg = options.barBg;\n    }\n\n    this.orientation = options.orientation || 'horizontal';\n\n    if (options.keys) {\n      this.on('keypress', (ch: string, key: ProgressBarKey) => {\n        let back: string[], forward: string[];\n        if (this.orientation === 'horizontal') {\n          back = ['left', 'h'];\n          forward = ['right', 'l'];\n        } else if (this.orientation === 'vertical') {\n          back = ['down', 'j'];\n          forward = ['up', 'k'];\n        }\n        if (key.name === back![0] || (options.vi && key.name === back![1])) {\n          this.progress(-5);\n          this.screen.render();\n          return;\n        }\n        if (\n          key.name === forward![0] ||\n          (options.vi && key.name === forward![1])\n        ) {\n          this.progress(5);\n          this.screen.render();\n          return;\n        }\n      });\n    }\n\n    if (options.mouse) {\n      this.on('click', (data: ProgressBarMouseData) => {\n        let x: number, y: number, m: number, p: number;\n        if (!this.lpos) return;\n        if (this.orientation === 'horizontal') {\n          x = data.x - this.lpos.xi;\n          m = this.lpos.xl - this.lpos.xi - this.iwidth;\n          p = ((x / m) * 100) | 0;\n        } else if (this.orientation === 'vertical') {\n          y = data.y - this.lpos.yi;\n          m = this.lpos.yl - this.lpos.yi - this.iheight;\n          p = ((y / m) * 100) | 0;\n        }\n        this.setProgress(p!);\n      });\n    }\n  }\n\n  render(): ProgressBarPosition | null {\n    const ret = this._render();\n    if (!ret) return null;\n\n    let xi = ret.xi;\n    let xl = ret.xl;\n    let yi = ret.yi;\n    let yl = ret.yl;\n    let dattr: any;\n\n    if (this.border) xi++, yi++, xl--, yl--;\n\n    if (this.orientation === 'horizontal') {\n      xl = (xi + (xl - xi) * (this.filled / 100)) | 0;\n    } else if (this.orientation === 'vertical') {\n      yi = yi + (yl - yi - (((yl - yi) * (this.filled / 100)) | 0));\n    }\n\n    dattr = this.sattr(this.style.bar);\n\n    this.screen.fillRegion(dattr, this.pch, xi, xl, yi, yl);\n\n    if (this.content) {\n      const line = this.screen.lines[yi];\n      for (let i = 0; i < this.content.length; i++) {\n        line[xi + i][1] = this.content[i];\n      }\n      line.dirty = true;\n    }\n\n    return ret;\n  }\n\n  progress(filled: number): void {\n    this.filled += filled;\n    if (this.filled < 0) this.filled = 0;\n    else if (this.filled > 100) this.filled = 100;\n    if (this.filled === 100) {\n      this.emit('complete');\n    }\n    this.value = this.filled;\n  }\n\n  setProgress(filled: number): void {\n    this.filled = 0;\n    this.progress(filled);\n  }\n\n  reset(): void {\n    this.emit('reset');\n    this.filled = 0;\n    this.value = this.filled;\n  }\n}\n\n/**\n * Factory function for backward compatibility\n */\nfunction progressBar(options?: ProgressBarOptions): ProgressBarInterface {\n  return new ProgressBar(options) as ProgressBarInterface;\n}\n\n// Attach the class as a property for direct access\nprogressBar.ProgressBar = ProgressBar;\n\n/**\n * Expose\n */\n\nexport default progressBar;\n","/**\n * filemanager.js - file manager element for blessed\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\n/**\n * Modules\n */\n\nimport * as path from 'path';\nimport * as fs from 'fs';\n\nimport * as helpers from '../helpers.js';\n\nimport Node from './node.js';\nimport listFactory from './list.js';\nconst List = listFactory.List;\n\n/**\n * Interfaces\n */\n\ninterface FileManagerOptions {\n  cwd?: string;\n  label?: string;\n  parseTags?: boolean;\n  [key: string]: any;\n}\n\ninterface FileItem {\n  name: string;\n  text: string;\n  dir: boolean;\n}\n\ninterface FileManagerLabel {\n  setContent(content: string): void;\n}\n\ninterface FileManagerScreen {\n  focused: any;\n  render(): void;\n  saveFocus(): void;\n  restoreFocus(): void;\n}\n\ninterface FileManagerInterface extends List {\n  type: string;\n  cwd: string;\n  file: string;\n  value: string;\n  _label: FileManagerLabel;\n  screen: FileManagerScreen;\n  options: FileManagerOptions;\n  hidden: boolean;\n\n  // Methods\n  refresh(cwd?: string | Function, callback?: Function): any;\n  pick(cwd?: string | Function, callback?: Function): void;\n  reset(cwd?: string | Function, callback?: Function): void;\n  emit(event: string, ...args: any[]): any;\n  on(event: string, listener: Function): void;\n  removeListener(event: string, listener: Function): void;\n  setItems(items: string[]): void;\n  select(index: number): void;\n  hide(): void;\n  show(): void;\n  focus(): void;\n}\n\n/**\n * FileManager - Modern ES6 Class\n */\n\nclass FileManager extends List {\n  type = 'file-manager';\n  cwd: string;\n  file: string;\n  value: string;\n\n  constructor(options?: FileManagerOptions) {\n    // Handle malformed options gracefully\n    if (!options || typeof options !== 'object' || Array.isArray(options)) {\n      options = {};\n    }\n\n    // Force filemanager-specific options\n    options.parseTags = true;\n    // options.label = ' {blue-fg}%path{/blue-fg} ';\n\n    super(options);\n\n    this.cwd = options.cwd || process.cwd();\n    this.file = this.cwd;\n    this.value = this.cwd;\n\n    if (options.label && ~options.label.indexOf('%path')) {\n      this._label.setContent(options.label.replace('%path', this.cwd));\n    }\n\n    this.on('select', (item: any) => {\n      const value = item.content.replace(/\\{[^{}]+\\}/g, '').replace(/@$/, '');\n      const file = path.resolve(this.cwd, value);\n\n      return fs.stat(\n        file,\n        (err: NodeJS.ErrnoException | null, stat?: fs.Stats) => {\n          if (err) {\n            return this.emit('error', err, file);\n          }\n          this.file = file;\n          this.value = file;\n          if (stat!.isDirectory()) {\n            this.emit('cd', file, this.cwd);\n            this.cwd = file;\n            if (options!.label && ~options!.label.indexOf('%path')) {\n              this._label.setContent(options!.label.replace('%path', file));\n            }\n            this.refresh();\n          } else {\n            this.emit('file', file);\n          }\n        }\n      );\n    });\n  }\n\n  refresh(cwd?: string | Function, callback?: Function): any {\n    if (!callback) {\n      callback = cwd;\n      cwd = null;\n    }\n\n    if (cwd) this.cwd = cwd as string;\n    else cwd = this.cwd;\n\n    return fs.readdir(\n      cwd as string,\n      (err: NodeJS.ErrnoException | null, list?: string[]) => {\n        if (err && err.code === 'ENOENT') {\n          this.cwd = cwd !== process.env.HOME ? process.env.HOME! : '/';\n          return this.refresh(callback);\n        }\n\n        if (err) {\n          if (callback) return callback(err);\n          return this.emit('error', err, cwd);\n        }\n\n        let dirs: FileItem[] = [];\n        let files: FileItem[] = [];\n\n        list!.unshift('..');\n\n        list!.forEach((name: string) => {\n          const f = path.resolve(cwd as string, name);\n          let stat: fs.Stats | undefined;\n\n          try {\n            stat = fs.lstatSync(f);\n          } catch (e) {}\n\n          if ((stat && stat.isDirectory()) || name === '..') {\n            dirs.push({\n              name: name,\n              text: '{light-blue-fg}' + name + '{/light-blue-fg}/',\n              dir: true,\n            });\n          } else if (stat && stat.isSymbolicLink()) {\n            files.push({\n              name: name,\n              text: '{light-cyan-fg}' + name + '{/light-cyan-fg}@',\n              dir: false,\n            });\n          } else {\n            files.push({\n              name: name,\n              text: name,\n              dir: false,\n            });\n          }\n        });\n\n        dirs = helpers.asort(dirs);\n        files = helpers.asort(files);\n\n        list = dirs.concat(files).map((data: FileItem) => {\n          return data.text;\n        });\n\n        this.setItems(list);\n        this.select(0);\n        this.screen.render();\n\n        this.emit('refresh');\n\n        if (callback) callback();\n      }\n    );\n  }\n\n  pick(cwd?: string | Function, callback?: Function): void {\n    if (!callback) {\n      callback = cwd;\n      cwd = null;\n    }\n\n    const focused = this.screen.focused === this;\n    const hidden = this.hidden;\n    let onfile: Function;\n    let oncancel: Function;\n\n    const resume = () => {\n      this.removeListener('file', onfile);\n      this.removeListener('cancel', oncancel);\n      if (hidden) {\n        this.hide();\n      }\n      if (!focused) {\n        this.screen.restoreFocus();\n      }\n      this.screen.render();\n    };\n\n    this.on(\n      'file',\n      (onfile = (file: string) => {\n        resume();\n        return callback!(null, file);\n      })\n    );\n\n    this.on(\n      'cancel',\n      (oncancel = () => {\n        resume();\n        return callback!();\n      })\n    );\n\n    this.refresh(cwd as string, (err?: NodeJS.ErrnoException) => {\n      if (err) return callback!(err);\n\n      if (hidden) {\n        this.show();\n      }\n\n      if (!focused) {\n        this.screen.saveFocus();\n        this.focus();\n      }\n\n      this.screen.render();\n    });\n  }\n\n  reset(cwd?: string | Function, callback?: Function): void {\n    if (!callback) {\n      callback = cwd;\n      cwd = null;\n    }\n    this.cwd = (cwd as string) || this.options.cwd;\n    this.refresh(callback);\n  }\n}\n\n/**\n * Factory function for backward compatibility\n */\nfunction fileManager(options?: FileManagerOptions): FileManagerInterface {\n  return new FileManager(options) as FileManagerInterface;\n}\n\n// Attach the class as a property for direct access\nfileManager.FileManager = FileManager;\n\n/**\n * Expose\n */\n\nexport default fileManager;\n","/**\n * checkbox.js - checkbox element for blessed\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\n/**\n * Modules\n */\n\nimport Node from './node.js';\nimport inputFactory from './input.js';\nconst Input = inputFactory.Input;\n\n/**\n * Type definitions\n */\n\ninterface CheckboxOptions {\n  content?: string;\n  text?: string;\n  checked?: boolean;\n  mouse?: boolean;\n  [key: string]: any;\n}\n\ninterface CheckboxKey {\n  name: string;\n}\n\ninterface CheckboxPosition {\n  yi: number;\n  xi: number;\n}\n\ninterface CheckboxProgram {\n  lsaveCursor(id: string): void;\n  lrestoreCursor(id: string, hide?: boolean): void;\n  cup(y: number, x: number): void;\n  showCursor(): void;\n}\n\ninterface CheckboxScreen {\n  render(): void;\n  program: CheckboxProgram;\n}\n\ninterface CheckboxInterface extends Input {\n  type: string;\n  text: string;\n  checked: boolean;\n  value: boolean;\n  lpos?: CheckboxPosition;\n  screen: CheckboxScreen;\n  on(event: string, listener: (...args: any[]) => void): void;\n  emit(event: string, ...args: any[]): boolean;\n  clearPos(force?: boolean): void;\n  setContent(content: string, noClear?: boolean): void;\n  _render(): any;\n  render(): any;\n  check(): void;\n  uncheck(): void;\n  toggle(): void;\n}\n\n/**\n * Checkbox - Modern ES6 Class\n */\n\nclass Checkbox extends Input {\n  type = 'checkbox';\n  text: string;\n  checked: boolean;\n  value: boolean;\n\n  constructor(options?: CheckboxOptions) {\n    // Handle malformed options gracefully\n    if (!options || typeof options !== 'object' || Array.isArray(options)) {\n      options = {};\n    }\n\n    super(options);\n\n    this.text = options.content || options.text || '';\n    this.checked = this.value = options.checked || false;\n\n    // Set up keyboard interaction\n    this.on('keypress', (ch: string, key: CheckboxKey) => {\n      if (key.name === 'enter' || key.name === 'space') {\n        this.toggle();\n        this.screen.render();\n      }\n    });\n\n    // Set up mouse interaction if enabled\n    if (options.mouse) {\n      this.on('click', () => {\n        this.toggle();\n        this.screen.render();\n      });\n    }\n\n    // Set up focus/blur cursor handling\n    this.on('focus', () => {\n      const lpos = this.lpos;\n      if (!lpos) return;\n      this.screen.program.lsaveCursor('checkbox');\n      this.screen.program.cup(lpos.yi, lpos.xi + 1);\n      this.screen.program.showCursor();\n    });\n\n    this.on('blur', () => {\n      this.screen.program.lrestoreCursor('checkbox', true);\n    });\n  }\n\n  render(): any {\n    this.clearPos(true);\n    this.setContent('[' + (this.checked ? 'x' : ' ') + '] ' + this.text, true);\n    return this._render();\n  }\n\n  check(): void {\n    if (this.checked) return;\n    this.checked = this.value = true;\n    this.emit('check');\n  }\n\n  uncheck(): void {\n    if (!this.checked) return;\n    this.checked = this.value = false;\n    this.emit('uncheck');\n  }\n\n  toggle(): void {\n    return this.checked ? this.uncheck() : this.check();\n  }\n}\n\n/**\n * Factory function for backward compatibility\n */\nfunction checkbox(options?: CheckboxOptions): CheckboxInterface {\n  return new Checkbox(options) as CheckboxInterface;\n}\n\n// Attach the class as a property for direct access\ncheckbox.Checkbox = Checkbox;\n\n/**\n * Expose\n */\n\nexport default checkbox;\n","/**\n * radioset.js - radio set element for blessed\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\n/**\n * Modules\n */\n\nimport Node from './node.js';\nimport boxFactory from './box.js';\nconst Box = boxFactory.Box;\n\n/**\n * Type definitions\n */\n\ninterface RadioSetOptions {\n  style?: any;\n  [key: string]: any;\n}\n\ninterface RadioSetInterface extends Box {\n  type: string;\n}\n\n/**\n * RadioSet - Modern ES6 Class\n */\n\nclass RadioSet extends Box {\n  type = 'radio-set';\n\n  constructor(options?: RadioSetOptions) {\n    // Handle malformed options gracefully\n    if (!options || typeof options !== 'object' || Array.isArray(options)) {\n      options = {};\n    }\n\n    // Possibly inherit parent's style.\n    // options.style = this.parent.style;\n    super(options);\n  }\n}\n\n/**\n * Factory function for backward compatibility\n */\nfunction radioSet(options?: RadioSetOptions): RadioSetInterface {\n  return new RadioSet(options) as RadioSetInterface;\n}\n\n// Attach the class as a property for direct access\nradioSet.RadioSet = RadioSet;\n\n/**\n * Expose\n */\n\nexport default radioSet;\n","/**\n * radiobutton.js - radio button element for blessed\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\n/**\n * Modules\n */\n\nimport Node from './node.js';\nimport Checkbox from './checkbox.js';\n\n/**\n * Type definitions\n */\n\ninterface RadioButtonOptions {\n  content?: string;\n  text?: string;\n  checked?: boolean;\n  mouse?: boolean;\n  [key: string]: any;\n}\n\ninterface RadioButtonInterface extends Checkbox {\n  type: string;\n  checked: boolean;\n  text: string;\n  parent?: RadioButtonInterface;\n  on(event: string, listener: (...args: any[]) => void): void;\n  clearPos(arg: boolean): void;\n  setContent(content: string, noTags: boolean): void;\n  _render(): any;\n  uncheck(): void;\n  forDescendants(callback: (el: RadioButtonInterface) => void): void;\n  render(): any;\n  toggle(): void;\n}\n\n/**\n * RadioButton - Modern ES6 Class\n */\n\nclass RadioButton extends Checkbox {\n  type = 'radio-button';\n\n  constructor(options?: RadioButtonOptions) {\n    // Handle malformed options gracefully\n    if (!options || typeof options !== 'object' || Array.isArray(options)) {\n      options = {};\n    }\n\n    super(options);\n\n    // Set up radio button group behavior\n    this.on('check', () => {\n      let el: RadioButtonInterface | undefined = this as any;\n      while ((el = el.parent)) {\n        if (el.type === 'radio-set' || el.type === 'form') break;\n      }\n      el = el || this.parent;\n      if (el) {\n        el.forDescendants((el: RadioButtonInterface) => {\n          if (el.type !== 'radio-button' || el === this) {\n            return;\n          }\n          el.uncheck();\n        });\n      }\n    });\n  }\n\n  render(): any {\n    this.clearPos(true);\n    this.setContent('(' + (this.checked ? '*' : ' ') + ') ' + this.text, true);\n    return this._render();\n  }\n\n  toggle(): void {\n    return this.check();\n  }\n}\n\n/**\n * Factory function for backward compatibility\n */\nfunction radioButton(options?: RadioButtonOptions): RadioButtonInterface {\n  return new RadioButton(options) as RadioButtonInterface;\n}\n\n// Attach the class as a property for direct access\nradioButton.RadioButton = RadioButton;\n\n/**\n * Expose\n */\n\nexport default radioButton;\n","/**\n * prompt.js - prompt element for blessed\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\n/**\n * Modules\n */\n\nimport Node from './node.js';\nimport boxFactory from './box.js';\nconst Box = boxFactory.Box;\nimport buttonFactory from './button.js';\nconst Button = buttonFactory.Button;\nimport textboxFactory from './textbox.js';\nconst Textbox = textboxFactory.Textbox;\n\n/**\n * Type definitions\n */\n\ninterface PromptOptions {\n  hidden?: boolean;\n  [key: string]: any;\n}\n\ninterface PromptCallback {\n  (err: Error | null, data?: string): void;\n}\n\ninterface PromptButton {\n  on(event: string, listener: () => void): void;\n  removeListener(event: string, listener: () => void): void;\n}\n\ninterface PromptTextbox {\n  value: string;\n  submit(): void;\n  cancel(): void;\n  readInput(callback: PromptCallback): void;\n}\n\ninterface PromptScreen {\n  saveFocus(): void;\n  restoreFocus(): void;\n  render(): void;\n}\n\ninterface PromptInterface extends Box {\n  type: string;\n  _: {\n    input: PromptTextbox;\n    okay: PromptButton;\n    cancel: PromptButton;\n  };\n  screen: PromptScreen;\n  show(): void;\n  hide(): void;\n  setContent(content: string): void;\n  input(text: string, value: string, callback: PromptCallback): void;\n  input(text: string, callback: PromptCallback): void;\n  setInput(text: string, value: string, callback: PromptCallback): void;\n  setInput(text: string, callback: PromptCallback): void;\n  readInput(text: string, value: string, callback: PromptCallback): void;\n  readInput(text: string, callback: PromptCallback): void;\n}\n\n/**\n * Prompt - Modern ES6 Class\n */\n\nclass Prompt extends Box {\n  type = 'prompt';\n  _: {\n    input: PromptTextbox;\n    okay: PromptButton;\n    cancel: PromptButton;\n  };\n\n  constructor(options?: PromptOptions) {\n    // Handle malformed options gracefully\n    if (!options || typeof options !== 'object' || Array.isArray(options)) {\n      options = {};\n    }\n\n    // Force hidden to true for modal behavior\n    options.hidden = true;\n\n    super(options);\n\n    // Initialize the internal objects container\n    this._ = {} as any;\n\n    // Create input textbox\n    this._.input = new Textbox({\n      parent: this,\n      top: 3,\n      height: 1,\n      left: 2,\n      right: 2,\n      bg: 'black',\n    });\n\n    // Create okay button\n    this._.okay = new Button({\n      parent: this,\n      top: 5,\n      height: 1,\n      left: 2,\n      width: 6,\n      content: 'Okay',\n      align: 'center',\n      bg: 'black',\n      hoverBg: 'blue',\n      autoFocus: false,\n      mouse: true,\n    });\n\n    // Create cancel button\n    this._.cancel = new Button({\n      parent: this,\n      top: 5,\n      height: 1,\n      shrink: true,\n      left: 10,\n      width: 8,\n      content: 'Cancel',\n      align: 'center',\n      bg: 'black',\n      hoverBg: 'blue',\n      autoFocus: false,\n      mouse: true,\n    });\n  }\n\n  input(text: string, value: string, callback: PromptCallback): void;\n  input(text: string, callback: PromptCallback): void;\n  input(\n    text: string,\n    value?: string | PromptCallback,\n    callback?: PromptCallback\n  ): void {\n    let okay: () => void, cancel: () => void;\n\n    if (!callback) {\n      callback = value as PromptCallback;\n      value = '';\n    }\n\n    // Keep above:\n    // var parent = this.parent;\n    // this.detach();\n    // parent.append(this);\n\n    this.show();\n    this.setContent(' ' + text);\n\n    this._.input.value = value as string;\n\n    this.screen.saveFocus();\n\n    this._.okay.on(\n      'press',\n      (okay = () => {\n        this._.input.submit();\n      })\n    );\n\n    this._.cancel.on(\n      'press',\n      (cancel = () => {\n        this._.input.cancel();\n      })\n    );\n\n    this._.input.readInput((err: Error | null, data?: string) => {\n      this.hide();\n      this.screen.restoreFocus();\n      this._.okay.removeListener('press', okay);\n      this._.cancel.removeListener('press', cancel);\n      return (callback as PromptCallback)(err, data);\n    });\n\n    this.screen.render();\n  }\n\n  setInput(text: string, value: string, callback: PromptCallback): void;\n  setInput(text: string, callback: PromptCallback): void;\n  setInput(\n    text: string,\n    value?: string | PromptCallback,\n    callback?: PromptCallback\n  ): void {\n    return this.input(text, value as any, callback);\n  }\n\n  readInput(text: string, value: string, callback: PromptCallback): void;\n  readInput(text: string, callback: PromptCallback): void;\n  readInput(\n    text: string,\n    value?: string | PromptCallback,\n    callback?: PromptCallback\n  ): void {\n    return this.input(text, value as any, callback);\n  }\n}\n\n/**\n * Factory function for backward compatibility\n */\nfunction prompt(options?: PromptOptions): PromptInterface {\n  return new Prompt(options) as PromptInterface;\n}\n\n// Attach the class as a property for direct access\nprompt.Prompt = Prompt;\n\n/**\n * Expose\n */\n\nexport default prompt;\n","/**\n * question.js - question element for blessed\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\n/**\n * Modules\n */\n\nimport Node from './node.js';\nimport boxFactory from './box.js';\nconst Box = boxFactory.Box;\nimport buttonFactory from './button.js';\nconst Button = buttonFactory.Button;\n\n/**\n * Type definitions\n */\n\ninterface QuestionOptions {\n  hidden?: boolean;\n  [key: string]: any;\n}\n\ninterface QuestionKey {\n  name: string;\n}\n\ninterface QuestionScreen {\n  saveFocus(): void;\n  restoreFocus(): void;\n  render(): void;\n}\n\ninterface QuestionButton {\n  on(event: string, listener: () => void): void;\n  removeListener(event: string, listener: () => void): void;\n}\n\ninterface QuestionInterface extends Box {\n  type: string;\n  screen: QuestionScreen;\n  _: {\n    okay: QuestionButton;\n    cancel: QuestionButton;\n  };\n  show(): void;\n  hide(): void;\n  focus(): void;\n  setContent(text: string): void;\n  onScreenEvent(event: string, listener: (...args: any[]) => void): void;\n  removeScreenEvent(event: string, listener: (...args: any[]) => void): void;\n  ask(text: string, callback: (err: any, data: boolean) => void): void;\n}\n\n/**\n * Question - Modern ES6 Class\n */\n\nclass Question extends Box {\n  type = 'question';\n  _: {\n    okay: QuestionButton;\n    cancel: QuestionButton;\n  };\n\n  constructor(options?: QuestionOptions) {\n    // Handle malformed options gracefully\n    if (!options || typeof options !== 'object' || Array.isArray(options)) {\n      options = {};\n    }\n\n    // Set default hidden behavior for questions\n    options.hidden = true;\n\n    super(options);\n\n    // Initialize the internal button container\n    this._ = {} as any;\n\n    // Create OK button\n    this._.okay = new Button({\n      screen: this.screen,\n      parent: this,\n      top: 2,\n      height: 1,\n      left: 2,\n      width: 6,\n      content: 'Okay',\n      align: 'center',\n      bg: 'black',\n      hoverBg: 'blue',\n      autoFocus: false,\n      mouse: true,\n    });\n\n    // Create Cancel button\n    this._.cancel = new Button({\n      screen: this.screen,\n      parent: this,\n      top: 2,\n      height: 1,\n      shrink: true,\n      left: 10,\n      width: 8,\n      content: 'Cancel',\n      align: 'center',\n      bg: 'black',\n      hoverBg: 'blue',\n      autoFocus: false,\n      mouse: true,\n    });\n  }\n\n  ask(text: string, callback: (err: any, data: boolean) => void): void {\n    const self = this;\n    let press: (ch: string, key: QuestionKey) => void;\n    let okay: () => void;\n    let cancel: () => void;\n\n    // Keep above:\n    // var parent = this.parent;\n    // this.detach();\n    // parent.append(this);\n\n    this.show();\n    this.setContent(' ' + text);\n\n    this.onScreenEvent(\n      'keypress',\n      (press = function (ch: string, key: QuestionKey) {\n        if (key.name === 'mouse') return;\n        if (\n          key.name !== 'enter' &&\n          key.name !== 'escape' &&\n          key.name !== 'q' &&\n          key.name !== 'y' &&\n          key.name !== 'n'\n        ) {\n          return;\n        }\n        done(null, key.name === 'enter' || key.name === 'y');\n      })\n    );\n\n    this._.okay.on(\n      'press',\n      (okay = function () {\n        done(null, true);\n      })\n    );\n\n    this._.cancel.on(\n      'press',\n      (cancel = function () {\n        done(null, false);\n      })\n    );\n\n    this.screen.saveFocus();\n    this.focus();\n\n    function done(err: any, data: boolean) {\n      self.hide();\n      self.screen.restoreFocus();\n      self.removeScreenEvent('keypress', press);\n      self._.okay.removeListener('press', okay);\n      self._.cancel.removeListener('press', cancel);\n      return callback(err, data);\n    }\n\n    this.screen.render();\n  }\n}\n\n/**\n * Factory function for backward compatibility\n */\nfunction question(options?: QuestionOptions): QuestionInterface {\n  return new Question(options) as QuestionInterface;\n}\n\n// Attach the class as a property for direct access\nquestion.Question = Question;\n\n/**\n * Expose\n */\n\nexport default question;\n","/**\n * message.js - message element for blessed\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\n/**\n * Modules\n */\n\nimport Node from './node.js';\nimport boxFactory from './box.js';\nconst Box = boxFactory.Box;\n\n/**\n * Type definitions\n */\n\ninterface MessageOptions {\n  tags?: boolean;\n  vi?: boolean;\n  mouse?: boolean;\n  ignoreKeys?: string[];\n  scrollable?: boolean;\n  [key: string]: any;\n}\n\ninterface KeyData {\n  name: string;\n  ctrl?: boolean;\n  shift?: boolean;\n}\n\ninterface MouseData {\n  action: string;\n}\n\ninterface MessageScreen {\n  saveFocus(): void;\n  restoreFocus(): void;\n  render(): void;\n}\n\ninterface MessageInterface extends Box {\n  type: string;\n  scrollable?: boolean;\n  options: MessageOptions;\n  screen: MessageScreen;\n  show(): void;\n  hide(): void;\n  focus(): void;\n  scrollTo(position: number): void;\n  setContent(text: string): void;\n  onScreenEvent(event: string, listener: (...args: any[]) => void): void;\n  removeScreenEvent(event: string, listener: (...args: any[]) => void): void;\n  display(\n    text: string,\n    time?: number | (() => void),\n    callback?: () => void\n  ): void;\n  log(text: string, time?: number | (() => void), callback?: () => void): void;\n  error(text: string, time?: number, callback?: () => void): void;\n}\n\n/**\n * Message - Modern ES6 Class\n */\n\nclass Message extends Box {\n  type = 'message';\n\n  constructor(options?: MessageOptions) {\n    // Handle malformed options gracefully\n    if (!options || typeof options !== 'object' || Array.isArray(options)) {\n      options = {};\n    }\n\n    // Set default tags behavior for messages\n    options.tags = true;\n\n    super(options);\n  }\n\n  display(\n    text: string,\n    time?: number | (() => void),\n    callback?: () => void\n  ): void {\n    const self = this;\n\n    if (typeof time === 'function') {\n      callback = time;\n      time = null;\n    }\n\n    if (time == null) time = 3;\n\n    // Keep above:\n    // var parent = this.parent;\n    // this.detach();\n    // parent.append(this);\n\n    if (this.scrollable) {\n      this.screen.saveFocus();\n      this.focus();\n      this.scrollTo(0);\n    }\n\n    this.show();\n    this.setContent(text);\n    this.screen.render();\n\n    if (time === Infinity || time === -1 || time === 0) {\n      const end = function () {\n        if ((end as any).done) return;\n        (end as any).done = true;\n        if (self.scrollable) {\n          try {\n            self.screen.restoreFocus();\n          } catch (e) {}\n        }\n        self.hide();\n        self.screen.render();\n        if (callback) callback();\n      };\n\n      setTimeout(function () {\n        self.onScreenEvent('keypress', function fn(ch: string, key: KeyData) {\n          if (key.name === 'mouse') return;\n          if (self.scrollable) {\n            if (\n              key.name === 'up' ||\n              (self.options.vi && key.name === 'k') ||\n              key.name === 'down' ||\n              (self.options.vi && key.name === 'j') ||\n              (self.options.vi && key.name === 'u' && key.ctrl) ||\n              (self.options.vi && key.name === 'd' && key.ctrl) ||\n              (self.options.vi && key.name === 'b' && key.ctrl) ||\n              (self.options.vi && key.name === 'f' && key.ctrl) ||\n              (self.options.vi && key.name === 'g' && !key.shift) ||\n              (self.options.vi && key.name === 'g' && key.shift)\n            ) {\n              return;\n            }\n          }\n          if (\n            self.options.ignoreKeys &&\n            self.options.ignoreKeys.indexOf(key.name) !== -1\n          ) {\n            return;\n          }\n          self.removeScreenEvent('keypress', fn);\n          end();\n        });\n        // XXX May be affected by new element.options.mouse option.\n        if (!self.options.mouse) return;\n        self.onScreenEvent('mouse', function fn(data: MouseData) {\n          if (data.action === 'mousemove') return;\n          self.removeScreenEvent('mouse', fn);\n          end();\n        });\n      }, 10);\n\n      return;\n    }\n\n    setTimeout(\n      function () {\n        self.hide();\n        self.screen.render();\n        if (callback) callback();\n      },\n      (time as number) * 1000\n    );\n  }\n\n  log(text: string, time?: number | (() => void), callback?: () => void): void {\n    return this.display(text, time, callback);\n  }\n\n  error(text: string, time?: number, callback?: () => void): void {\n    return this.display('{red-fg}Error: ' + text + '{/red-fg}', time, callback);\n  }\n}\n\n/**\n * Factory function for backward compatibility\n */\nfunction message(options?: MessageOptions): MessageInterface {\n  return new Message(options) as MessageInterface;\n}\n\n// Attach the class as a property for direct access\nmessage.Message = Message;\n\n/**\n * Expose\n */\n\nexport default message;\n","/**\n * loading.js - loading element for blessed\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\n/**\n * Modules\n */\n\nimport Node from './node.js';\nimport boxFactory from './box.js';\nconst Box = boxFactory.Box;\nimport textFactory from './text.js';\nconst Text = textFactory.Text;\n\n/**\n * Type definitions\n */\n\ninterface LoadingOptions {\n  [key: string]: any;\n}\n\ninterface LoadingIcon {\n  content: string;\n  setContent(content: string): void;\n}\n\ninterface LoadingScreen {\n  lockKeys: boolean;\n  render(): void;\n}\n\ninterface LoadingInterface extends Box {\n  type: string;\n  _: {\n    icon: LoadingIcon;\n    timer?: NodeJS.Timeout;\n  };\n  screen: LoadingScreen;\n  show(): void;\n  hide(): void;\n  setContent(text: string): void;\n  load(text: string): void;\n  stop(): void;\n}\n\n/**\n * Loading - Modern ES6 Class\n */\n\nclass Loading extends Box {\n  type = 'loading';\n  _: {\n    icon: LoadingIcon;\n    timer?: NodeJS.Timeout;\n  };\n\n  constructor(options?: LoadingOptions) {\n    // Handle malformed options gracefully\n    if (!options || typeof options !== 'object' || Array.isArray(options)) {\n      options = {};\n    }\n\n    super(options);\n\n    this._ = {\n      icon: new Text({\n        parent: this,\n        align: 'center',\n        top: 2,\n        left: 1,\n        right: 1,\n        height: 1,\n        content: '|',\n      }),\n    };\n  }\n\n  load(text: string): void {\n    // XXX Keep above:\n    // var parent = this.parent;\n    // this.detach();\n    // parent.append(this);\n\n    this.show();\n    this.setContent(text);\n\n    if (this._.timer) {\n      this.stop();\n    }\n\n    this.screen.lockKeys = true;\n\n    this._.timer = setInterval(() => {\n      if (this._.icon.content === '|') {\n        this._.icon.setContent('/');\n      } else if (this._.icon.content === '/') {\n        this._.icon.setContent('-');\n      } else if (this._.icon.content === '-') {\n        this._.icon.setContent('\\\\');\n      } else if (this._.icon.content === '\\\\') {\n        this._.icon.setContent('|');\n      }\n      this.screen.render();\n    }, 200);\n  }\n\n  stop(): void {\n    this.screen.lockKeys = false;\n    this.hide();\n    if (this._.timer) {\n      clearInterval(this._.timer);\n      delete this._.timer;\n    }\n    this.screen.render();\n  }\n}\n\n/**\n * Factory function for backward compatibility\n */\nfunction loading(options?: LoadingOptions): LoadingInterface {\n  return new Loading(options) as LoadingInterface;\n}\n\n// Attach the class as a property for direct access\nloading.Loading = Loading;\n\n/**\n * Expose\n */\n\nexport default loading;\n","/**\n * listbar.js - listbar element for blessed\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\n/**\n * Modules\n */\n\nimport * as helpers from '../helpers.js';\n\nimport Node from './node.js';\nimport boxFactory from './box.js';\nconst Box = boxFactory.Box;\n\n/**\n * Type definitions\n */\n\ninterface ListbarOptions {\n  mouse?: boolean;\n  commands?: ListbarCommand[] | { [key: string]: ListbarCommand | Function };\n  items?: ListbarCommand[] | { [key: string]: ListbarCommand | Function };\n  keys?: boolean;\n  vi?: boolean;\n  autoCommandKeys?: boolean;\n  [key: string]: any;\n}\n\ninterface ListbarCommand {\n  text?: string;\n  prefix?: string;\n  callback?: Function;\n  keys?: string[];\n}\n\ninterface ListbarKey {\n  name: string;\n  shift?: boolean;\n}\n\ninterface ListbarStyle {\n  selected?: { [key: string]: any };\n  item?: { [key: string]: any };\n  prefix?: { [key: string]: any };\n  [key: string]: any;\n}\n\ninterface ListbarCoords {\n  xi: number;\n  xl: number;\n  yi: number;\n  yl: number;\n}\n\ninterface ListbarElement {\n  aleft?: number;\n  width: number;\n  hide(): void;\n  show(): void;\n  rleft?: number;\n  _?: { cmd: ListbarCommand };\n  _getCoords(): ListbarCoords | undefined;\n  detach(): void;\n  on(event: string, listener: Function): void;\n}\n\ninterface ListbarScreen {\n  autoPadding?: boolean;\n  render(): void;\n  key(keys: string[], callback: Function): void;\n}\n\ninterface ListbarInterface extends Box {\n  type: string;\n  items: ListbarElement[];\n  ritems: string[];\n  commands: ListbarCommand[];\n  leftBase: number;\n  leftOffset: number;\n  mouse: boolean;\n  style: ListbarStyle;\n  screen: ListbarScreen;\n  parent?: any;\n  ileft: number;\n  itop: number;\n  iwidth: number;\n  _: { [key: string]: any };\n  selected: number;\n  on(event: string, listener: Function): void;\n  emit(event: string, ...args: any[]): boolean;\n  onScreenEvent(event: string, listener: Function): void;\n  append(element: any): void;\n  remove(element: any): void;\n  _getCoords(): ListbarCoords | undefined;\n  _render(): any;\n  setItems(\n    commands: ListbarCommand[] | { [key: string]: ListbarCommand | Function }\n  ): void;\n  add(item: string | Function | ListbarCommand, callback?: Function): void;\n  addItem(item: string | Function | ListbarCommand, callback?: Function): void;\n  appendItem(\n    item: string | Function | ListbarCommand,\n    callback?: Function\n  ): void;\n  render(): any;\n  select(offset: number | ListbarElement): void;\n  removeItem(child: number | ListbarElement): void;\n  move(offset: number): void;\n  moveLeft(offset?: number): void;\n  moveRight(offset?: number): void;\n  selectTab(index: number): void;\n}\n\n/**\n * Listbar / HorizontalList - Modern ES6 Class\n */\n\nclass Listbar extends Box {\n  type = 'listbar';\n  items: ListbarElement[];\n  ritems: string[];\n  commands: ListbarCommand[];\n  leftBase: number;\n  leftOffset: number;\n  mouse: boolean;\n\n  constructor(options?: ListbarOptions) {\n    // Handle malformed options gracefully\n    if (!options || typeof options !== 'object' || Array.isArray(options)) {\n      options = {};\n    }\n\n    super(options);\n\n    this.items = [];\n    this.ritems = [];\n    this.commands = [];\n\n    this.leftBase = 0;\n    this.leftOffset = 0;\n\n    this.mouse = options.mouse || false;\n\n    if (!this.style.selected) {\n      this.style.selected = {};\n    }\n\n    if (!this.style.item) {\n      this.style.item = {};\n    }\n\n    if (options.commands || options.items) {\n      this.setItems(options.commands || options.items);\n    }\n\n    if (options.keys) {\n      this.on('keypress', (ch: string, key: ListbarKey) => {\n        if (\n          key.name === 'left' ||\n          (options!.vi && key.name === 'h') ||\n          (key.shift && key.name === 'tab')\n        ) {\n          this.moveLeft();\n          this.screen.render();\n          // Stop propagation if we're in a form.\n          if (key.name === 'tab') return false;\n          return;\n        }\n        if (\n          key.name === 'right' ||\n          (options!.vi && key.name === 'l') ||\n          key.name === 'tab'\n        ) {\n          this.moveRight();\n          this.screen.render();\n          // Stop propagation if we're in a form.\n          if (key.name === 'tab') return false;\n          return;\n        }\n        if (\n          key.name === 'enter' ||\n          (options!.vi && key.name === 'k' && !key.shift)\n        ) {\n          this.emit('action', this.items[this.selected], this.selected);\n          this.emit('select', this.items[this.selected], this.selected);\n          const item = this.items[this.selected];\n          if (item._!.cmd.callback) {\n            item._!.cmd.callback();\n          }\n          this.screen.render();\n          return;\n        }\n        if (key.name === 'escape' || (options!.vi && key.name === 'q')) {\n          this.emit('action');\n          this.emit('cancel');\n          return;\n        }\n      });\n    }\n\n    if (options.autoCommandKeys) {\n      this.onScreenEvent('keypress', (ch: string) => {\n        if (/^[0-9]$/.test(ch)) {\n          let i = +ch - 1;\n          if (!~i) i = 9;\n          return this.selectTab(i);\n        }\n      });\n    }\n\n    this.on('focus', () => {\n      this.select(this.selected);\n    });\n  }\n\n  get selected(): number {\n    return this.leftBase + this.leftOffset;\n  }\n\n  setItems(\n    commands: ListbarCommand[] | { [key: string]: ListbarCommand | Function }\n  ): void {\n    let commandsArray: ListbarCommand[];\n    if (!Array.isArray(commands)) {\n      commandsArray = Object.keys(commands).reduce(\n        (obj: ListbarCommand[], key: string, i: number): ListbarCommand[] => {\n          let cmd = commands[key];\n          let cb: Function;\n\n          if (typeof cmd === 'function') {\n            cb = cmd;\n            cmd = { callback: cb };\n          }\n\n          if ((cmd as ListbarCommand).text == null)\n            (cmd as ListbarCommand).text = key;\n          if ((cmd as ListbarCommand).prefix == null)\n            (cmd as ListbarCommand).prefix = ++i + '';\n\n          if (\n            (cmd as ListbarCommand).text == null &&\n            (cmd as ListbarCommand).callback\n          ) {\n            (cmd as ListbarCommand).text = (\n              cmd as ListbarCommand\n            ).callback!.name;\n          }\n\n          obj.push(cmd as ListbarCommand);\n\n          return obj;\n        },\n        []\n      );\n    } else {\n      commandsArray = commands;\n    }\n\n    this.items.forEach((el: ListbarElement) => {\n      el.detach();\n    });\n\n    this.items = [];\n    this.ritems = [];\n    this.commands = [];\n\n    commandsArray.forEach((cmd: ListbarCommand) => {\n      this.add(cmd);\n    });\n\n    this.emit('set items');\n  }\n\n  add(item: string | Function | ListbarCommand, callback?: Function): void {\n    this.addItem(item, callback);\n  }\n\n  addItem(item: string | Function | ListbarCommand, callback?: Function): void {\n    this.appendItem(item, callback);\n  }\n\n  appendItem(\n    item: string | Function | ListbarCommand,\n    callback?: Function\n  ): void {\n    const prev = this.items[this.items.length - 1];\n    let drawn: number;\n    let cmd: ListbarCommand;\n    let title: string;\n    let len: number;\n\n    if (!this.parent) {\n      drawn = 0;\n    } else {\n      drawn = prev ? prev.aleft + prev.width : 0;\n      if (!this.screen.autoPadding) {\n        drawn += this.ileft;\n      }\n    }\n\n    if (typeof item === 'object') {\n      cmd = item;\n      if (cmd.prefix == null) cmd.prefix = this.items.length + 1 + '';\n    }\n\n    if (typeof item === 'string') {\n      cmd = {\n        prefix: this.items.length + 1 + '',\n        text: item,\n        callback: callback,\n      };\n    }\n\n    if (typeof item === 'function') {\n      cmd = {\n        prefix: this.items.length + 1 + '',\n        text: item.name,\n        callback: item,\n      };\n    }\n\n    if (cmd.keys && cmd.keys[0]) {\n      cmd.prefix = cmd.keys[0];\n    }\n\n    const t = helpers.generateTags(this.style.prefix || { fg: 'lightblack' });\n\n    title =\n      (cmd.prefix != null ? t.open + cmd.prefix + t.close + ':' : '') +\n      cmd.text;\n\n    len = ((cmd.prefix != null ? cmd.prefix + ':' : '') + cmd.text).length;\n\n    const options = {\n      screen: this.screen,\n      top: 0,\n      left: drawn + 1,\n      height: 1,\n      content: title,\n      width: len + 2,\n      align: 'center',\n      autoFocus: false,\n      tags: true,\n      mouse: true,\n      style: helpers.merge({}, this.style.item),\n      noOverflow: true,\n    };\n\n    if (!this.screen.autoPadding) {\n      options.top += this.itop;\n      options.left += this.ileft;\n    }\n\n    ['bg', 'fg', 'bold', 'underline', 'blink', 'inverse', 'invisible'].forEach(\n      (name: string) => {\n        options.style[name] = () => {\n          const attr =\n            this.items[this.selected] === el\n              ? this.style.selected[name]\n              : this.style.item[name];\n          if (typeof attr === 'function') return attr(el);\n          return attr;\n        };\n      }\n    );\n\n    const el = new Box(options);\n\n    this._[cmd.text] = el;\n    cmd.element = el;\n    el._.cmd = cmd;\n\n    this.ritems.push(cmd.text);\n    this.items.push(el);\n    this.commands.push(cmd);\n    this.append(el);\n\n    if (cmd.callback) {\n      if (cmd.keys) {\n        this.screen.key(cmd.keys, () => {\n          this.emit('action', el, this.selected);\n          this.emit('select', el, this.selected);\n          if (el._.cmd.callback) {\n            el._.cmd.callback();\n          }\n          this.select(el);\n          this.screen.render();\n        });\n      }\n    }\n\n    if (this.items.length === 1) {\n      this.select(0);\n    }\n\n    // XXX May be affected by new element.options.mouse option.\n    if (this.mouse) {\n      el.on('click', () => {\n        this.emit('action', el, this.selected);\n        this.emit('select', el, this.selected);\n        if (el._.cmd.callback) {\n          el._.cmd.callback();\n        }\n        this.select(el);\n        this.screen.render();\n      });\n    }\n\n    this.emit('add item');\n  }\n\n  render(): any {\n    let drawn = 0;\n\n    if (!this.screen.autoPadding) {\n      drawn += this.ileft;\n    }\n\n    this.items.forEach((el: ListbarElement, i: number) => {\n      if (i < this.leftBase) {\n        el.hide();\n      } else {\n        el.rleft = drawn + 1;\n        drawn += el.width + 2;\n        el.show();\n      }\n    });\n\n    return this._render();\n  }\n\n  select(offset: number | ListbarElement): void {\n    let offsetNum: number;\n    if (typeof offset !== 'number') {\n      offsetNum = this.items.indexOf(offset);\n    } else {\n      offsetNum = offset;\n    }\n\n    if (offsetNum < 0) {\n      offsetNum = 0;\n    } else if (offsetNum >= this.items.length) {\n      offsetNum = this.items.length - 1;\n    }\n\n    if (!this.parent) {\n      this.emit('select item', this.items[offsetNum], offsetNum);\n      return;\n    }\n\n    const lpos = this._getCoords();\n    if (!lpos) return;\n\n    const width = lpos.xl - lpos.xi - this.iwidth;\n    let drawn = 0;\n    let visible = 0;\n    const el = this.items[offsetNum];\n    if (!el) return;\n\n    this.items.forEach((el: ListbarElement, i: number) => {\n      if (i < this.leftBase) return;\n\n      const lpos = el._getCoords();\n      if (!lpos) return;\n\n      if (lpos.xl - lpos.xi <= 0) return;\n\n      drawn += lpos.xl - lpos.xi + 2;\n\n      if (drawn <= width) visible++;\n    });\n\n    let diff = offsetNum - (this.leftBase + this.leftOffset);\n    if (offsetNum > this.leftBase + this.leftOffset) {\n      if (offsetNum > this.leftBase + visible - 1) {\n        this.leftOffset = 0;\n        this.leftBase = offsetNum;\n      } else {\n        this.leftOffset += diff;\n      }\n    } else if (offsetNum < this.leftBase + this.leftOffset) {\n      diff = -diff;\n      if (offsetNum < this.leftBase) {\n        this.leftOffset = 0;\n        this.leftBase = offsetNum;\n      } else {\n        this.leftOffset -= diff;\n      }\n    }\n\n    // XXX Move `action` and `select` events here.\n    this.emit('select item', el, offsetNum);\n  }\n\n  removeItem(child: number | ListbarElement): void {\n    const i = typeof child !== 'number' ? this.items.indexOf(child) : child;\n\n    if (~i && this.items[i]) {\n      child = this.items.splice(i, 1)[0];\n      this.ritems.splice(i, 1);\n      this.commands.splice(i, 1);\n      this.remove(child);\n      if (i === this.selected) {\n        this.select(i - 1);\n      }\n    }\n\n    this.emit('remove item');\n  }\n\n  move(offset: number): void {\n    this.select(this.selected + offset);\n  }\n\n  moveLeft(offset?: number): void {\n    this.move(-(offset || 1));\n  }\n\n  moveRight(offset?: number): void {\n    this.move(offset || 1);\n  }\n\n  selectTab(index: number): void {\n    const item = this.items[index];\n    if (item) {\n      if (item._!.cmd.callback) {\n        item._!.cmd.callback();\n      }\n      this.select(index);\n      this.screen.render();\n    }\n    this.emit('select tab', item, index);\n  }\n}\n\n/**\n * Factory function for backward compatibility\n */\nfunction listbar(options?: ListbarOptions): ListbarInterface {\n  return new Listbar(options) as ListbarInterface;\n}\n\n// Attach the class as a property for direct access\nlistbar.Listbar = Listbar;\n\n/**\n * Expose\n */\n\nexport default listbar;\n","/**\n * table.js - table element for blessed\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\n/**\n * Modules\n */\n\nimport Node from './node.js';\nimport boxFactory from './box.js';\nconst Box = boxFactory.Box;\n\n/**\n * Interfaces\n */\n\ninterface TableStyle {\n  border?: any;\n  header?: any;\n  cell?: any;\n  [key: string]: any;\n}\n\ninterface TableBorder {\n  left?: boolean;\n  right?: boolean;\n  top?: boolean;\n  bottom?: boolean;\n}\n\ninterface TableOptions {\n  shrink?: boolean;\n  style?: TableStyle;\n  align?: 'left' | 'center' | 'right';\n  height?: number;\n  pad?: number;\n  rows?: string[][];\n  data?: string[][];\n  noCellBorders?: boolean;\n  fillCellBorders?: boolean;\n  [key: string]: any;\n}\n\ninterface TablePosition {\n  width?: number;\n  [key: string]: any;\n}\n\ninterface TableScreen {\n  lines: any[][];\n  render(): void;\n}\n\ninterface TableCoords {\n  xi: number;\n  xl: number;\n  yi: number;\n  yl: number;\n}\n\ninterface TableInterface extends Box {\n  type: string;\n  pad: number;\n  rows: string[][];\n  _maxes?: number[];\n  align: 'left' | 'center' | 'right';\n  style: TableStyle;\n  position: TablePosition;\n  width: number;\n  screen: TableScreen;\n  border?: TableBorder;\n  options: TableOptions;\n  detached: boolean;\n  iright: number;\n  ibottom: number;\n  itop: number;\n  ileft: number;\n  iheight: number;\n\n  // Methods\n  _calculateMaxes(): number[];\n  setRows(rows: string[][]): void;\n  setData(rows: string[][]): void;\n  render(): TableCoords | undefined;\n  _render(): TableCoords | undefined;\n  strWidth(str: string): number;\n  setContent(content: string): void;\n  sattr(style: any): number;\n  on(event: string, listener: Function): void;\n}\n\n/**\n * Table - Modern ES6 Class\n */\n\nclass Table extends Box {\n  type = 'table';\n  pad: number;\n  rows: string[][];\n  _maxes?: number[];\n  align: 'left' | 'center' | 'right';\n\n  constructor(options?: TableOptions) {\n    // Handle malformed options gracefully\n    if (!options || typeof options !== 'object' || Array.isArray(options)) {\n      options = {};\n    }\n\n    options.shrink = true;\n    options.style = options.style || {};\n    options.style.border = options.style.border || {};\n    options.style.header = options.style.header || {};\n    options.style.cell = options.style.cell || {};\n    options.align = options.align || 'center';\n\n    // Regular tables do not get custom height (this would\n    // require extra padding). Maybe add in the future.\n    delete options.height;\n\n    super(options);\n\n    this.pad = options.pad != null ? options.pad : 2;\n    this.rows = [];\n    this.align = options.align || 'center';\n\n    this.setData(options.rows || options.data);\n\n    this.on('attach', () => {\n      this.setContent('');\n      this.setData(this.rows);\n    });\n\n    this.on('resize', () => {\n      this.setContent('');\n      this.setData(this.rows);\n      this.screen.render();\n    });\n  }\n\n  _calculateMaxes(): number[] {\n    var maxes: number[] = [];\n\n    if (this.detached) return;\n\n    this.rows = this.rows || [];\n\n    this.rows.forEach((row: string[]) => {\n      row.forEach((cell: string, i: number) => {\n        var clen = this.strWidth(cell);\n        if (!maxes[i] || maxes[i] < clen) {\n          maxes[i] = clen;\n        }\n      });\n    });\n\n    var total = maxes.reduce((total: number, max: number) => {\n      return total + max;\n    }, 0);\n    total += maxes.length + 1;\n\n    // XXX There might be an issue with resizing where on the first resize event\n    // width appears to be less than total if it's a percentage or left/right\n    // combination.\n    if (this.width < total) {\n      delete this.position.width;\n    }\n\n    if (this.position.width != null) {\n      var missing = this.width - total;\n      var w = (missing / maxes.length) | 0;\n      var wr = missing % maxes.length;\n      maxes = maxes.map((max: number, i: number) => {\n        if (i === maxes.length - 1) {\n          return max + w + wr;\n        }\n        return max + w;\n      });\n    } else {\n      maxes = maxes.map((max: number) => {\n        return max + this.pad;\n      });\n    }\n\n    return (this._maxes = maxes);\n  }\n\n  setRows(rows?: string[][]): void {\n    this.setData(rows);\n  }\n\n  setData(rows?: string[][]): void {\n    var text = '',\n      align = this.align;\n\n    this.rows = rows || [];\n\n    this._calculateMaxes();\n\n    if (!this._maxes) return;\n\n    this.rows.forEach((row: string[], i: number) => {\n      var isFooter = i === this.rows.length - 1;\n      row.forEach((cell: string, i: number) => {\n        var width = this._maxes[i];\n        var clen = this.strWidth(cell);\n\n        if (i !== 0) {\n          text += ' ';\n        }\n\n        while (clen < width) {\n          if (align === 'center') {\n            cell = ' ' + cell + ' ';\n            clen += 2;\n          } else if (align === 'left') {\n            cell = cell + ' ';\n            clen += 1;\n          } else if (align === 'right') {\n            cell = ' ' + cell;\n            clen += 1;\n          }\n        }\n\n        if (clen > width) {\n          if (align === 'center') {\n            cell = cell.substring(1);\n            clen--;\n          } else if (align === 'left') {\n            cell = cell.slice(0, -1);\n            clen--;\n          } else if (align === 'right') {\n            cell = cell.substring(1);\n            clen--;\n          }\n        }\n\n        text += cell;\n      });\n      if (!isFooter) {\n        text += '\\n\\n';\n      }\n    });\n\n    delete this.align;\n    this.setContent(text);\n    this.align = align;\n  }\n\n  render(): TableCoords | undefined {\n    var coords = this._render();\n    if (!coords) return;\n\n    this._calculateMaxes();\n\n    if (!this._maxes) return coords;\n\n    var lines = this.screen.lines,\n      xi = coords.xi,\n      yi = coords.yi,\n      rx,\n      ry,\n      i;\n\n    var dattr = this.sattr(this.style),\n      hattr = this.sattr(this.style.header),\n      cattr = this.sattr(this.style.cell),\n      battr = this.sattr(this.style.border);\n\n    var width = coords.xl - coords.xi - this.iright,\n      height = coords.yl - coords.yi - this.ibottom;\n\n    // Apply attributes to header cells and cells.\n    for (var y = this.itop; y < height; y++) {\n      if (!lines[yi + y]) break;\n      for (var x = this.ileft; x < width; x++) {\n        if (!lines[yi + y][xi + x]) break;\n        // Check to see if it's not the default attr. Allows for tags:\n        if (lines[yi + y][xi + x][0] !== dattr) continue;\n        if (y === this.itop) {\n          lines[yi + y][xi + x][0] = hattr;\n        } else {\n          lines[yi + y][xi + x][0] = cattr;\n        }\n        lines[yi + y].dirty = true;\n      }\n    }\n\n    if (!this.border || this.options.noCellBorders) return coords;\n\n    // Draw border with correct angles.\n    ry = 0;\n    for (i = 0; i < this.rows.length + 1; i++) {\n      if (!lines[yi + ry]) break;\n      rx = 0;\n      this._maxes.forEach((max: number, i: number) => {\n        rx += max;\n        if (i === 0) {\n          if (!lines[yi + ry][xi + 0]) return;\n          // left side\n          if (ry === 0) {\n            // top\n            lines[yi + ry][xi + 0][0] = battr;\n            // lines[yi + ry][xi + 0][1] = '\\u250c'; // '┌'\n          } else if (ry / 2 === this.rows.length) {\n            // bottom\n            lines[yi + ry][xi + 0][0] = battr;\n            // lines[yi + ry][xi + 0][1] = '\\u2514'; // '└'\n          } else {\n            // middle\n            lines[yi + ry][xi + 0][0] = battr;\n            lines[yi + ry][xi + 0][1] = '\\u251c'; // '├'\n            // XXX If we alter iwidth and ileft for no borders - nothing should be written here\n            if (!this.border.left) {\n              lines[yi + ry][xi + 0][1] = '\\u2500'; // '─'\n            }\n          }\n          lines[yi + ry].dirty = true;\n        } else if (i === this._maxes.length - 1) {\n          if (!lines[yi + ry][xi + rx + 1]) return;\n          // right side\n          if (ry === 0) {\n            // top\n            rx++;\n            lines[yi + ry][xi + rx][0] = battr;\n            // lines[yi + ry][xi + rx][1] = '\\u2510'; // '┐'\n          } else if (ry / 2 === this.rows.length) {\n            // bottom\n            rx++;\n            lines[yi + ry][xi + rx][0] = battr;\n            // lines[yi + ry][xi + rx][1] = '\\u2518'; // '┘'\n          } else {\n            // middle\n            rx++;\n            lines[yi + ry][xi + rx][0] = battr;\n            lines[yi + ry][xi + rx][1] = '\\u2524'; // '┤'\n            // XXX If we alter iwidth and iright for no borders - nothing should be written here\n            if (!this.border.right) {\n              lines[yi + ry][xi + rx][1] = '\\u2500'; // '─'\n            }\n          }\n          lines[yi + ry].dirty = true;\n          return;\n        }\n        if (!lines[yi + ry][xi + rx + 1]) return;\n        // center\n        if (ry === 0) {\n          // top\n          rx++;\n          lines[yi + ry][xi + rx][0] = battr;\n          lines[yi + ry][xi + rx][1] = '\\u252c'; // '┬'\n          // XXX If we alter iheight and itop for no borders - nothing should be written here\n          if (!this.border.top) {\n            lines[yi + ry][xi + rx][1] = '\\u2502'; // '│'\n          }\n        } else if (ry / 2 === this.rows.length) {\n          // bottom\n          rx++;\n          lines[yi + ry][xi + rx][0] = battr;\n          lines[yi + ry][xi + rx][1] = '\\u2534'; // '┴'\n          // XXX If we alter iheight and ibottom for no borders - nothing should be written here\n          if (!this.border.bottom) {\n            lines[yi + ry][xi + rx][1] = '\\u2502'; // '│'\n          }\n        } else {\n          // middle\n          if (this.options.fillCellBorders) {\n            var lbg = (ry <= 2 ? hattr : cattr) & 0x1ff;\n            rx++;\n            lines[yi + ry][xi + rx][0] = (battr & ~0x1ff) | lbg;\n          } else {\n            rx++;\n            lines[yi + ry][xi + rx][0] = battr;\n          }\n          lines[yi + ry][xi + rx][1] = '\\u253c'; // '┼'\n          // rx++;\n        }\n        lines[yi + ry].dirty = true;\n      });\n      ry += 2;\n    }\n\n    // Draw internal borders.\n    for (ry = 1; ry < this.rows.length * 2; ry++) {\n      if (!lines[yi + ry]) break;\n      rx = 0;\n      this._maxes.slice(0, -1).forEach((max: number) => {\n        rx += max;\n        if (!lines[yi + ry][xi + rx + 1]) return;\n        if (ry % 2 !== 0) {\n          if (this.options.fillCellBorders) {\n            var lbg = (ry <= 2 ? hattr : cattr) & 0x1ff;\n            rx++;\n            lines[yi + ry][xi + rx][0] = (battr & ~0x1ff) | lbg;\n          } else {\n            rx++;\n            lines[yi + ry][xi + rx][0] = battr;\n          }\n          lines[yi + ry][xi + rx][1] = '\\u2502'; // '│'\n          lines[yi + ry].dirty = true;\n        } else {\n          rx++;\n        }\n      });\n      rx = 1;\n      this._maxes.forEach((max: number) => {\n        while (max--) {\n          if (ry % 2 === 0) {\n            if (!lines[yi + ry]) break;\n            if (!lines[yi + ry][xi + rx + 1]) break;\n            if (this.options.fillCellBorders) {\n              var lbg = (ry <= 2 ? hattr : cattr) & 0x1ff;\n              lines[yi + ry][xi + rx][0] = (battr & ~0x1ff) | lbg;\n            } else {\n              lines[yi + ry][xi + rx][0] = battr;\n            }\n            lines[yi + ry][xi + rx][1] = '\\u2500'; // '─'\n            lines[yi + ry].dirty = true;\n          }\n          rx++;\n        }\n        rx++;\n      });\n    }\n\n    return coords;\n  }\n}\n\n/**\n * Factory function for backward compatibility\n */\nfunction table(options?: TableOptions): TableInterface {\n  return new Table(options) as TableInterface;\n}\n\n// Attach the class as a property for direct access\ntable.Table = Table;\n\n/**\n * Expose\n */\n\nexport default table;\n","/**\n * listtable.js - list table element for blessed\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\n/**\n * Modules\n */\n\nimport Node from './node.js';\nimport boxFactory from './box.js';\nconst Box = boxFactory.Box;\nimport listFactory from './list.js';\nconst List = listFactory.List;\nimport Table from './table.js';\n\n/**\n * Type definitions\n */\n\ninterface ListTableOptions {\n  normalShrink?: boolean;\n  style?: {\n    border?: { [key: string]: any };\n    header?: { [key: string]: any };\n    cell?: {\n      [key: string]: any;\n      selected?: { [key: string]: any };\n    };\n    [key: string]: any;\n  };\n  align?: 'left' | 'center' | 'right';\n  border?: {\n    top?: boolean;\n    bottom?: boolean;\n    left?: boolean;\n    right?: boolean;\n    [key: string]: any;\n  };\n  parseTags?: boolean;\n  tags?: boolean;\n  pad?: number;\n  rows?: string[][];\n  data?: string[][];\n  noCellBorders?: boolean;\n  fillCellBorders?: boolean;\n  [key: string]: any;\n}\n\ninterface ListTableCoords {\n  xi: number;\n  xl: number;\n  yi: number;\n  yl: number;\n}\n\ninterface ListTableLine {\n  dirty?: boolean;\n  [index: number]: [number, string];\n}\n\ninterface ListTableScreen {\n  lines: ListTableLine[];\n  autoPadding?: boolean;\n}\n\ninterface ListTableHeader {\n  setFront(): void;\n  setContent(content: string): void;\n  rtop?: number;\n}\n\ninterface ListTableInterface extends List {\n  type: string;\n  __align: 'left' | 'center' | 'right';\n  _header: ListTableHeader;\n  pad: number;\n  rows: string[][];\n  _maxes?: number[];\n  border?: any;\n  options: ListTableOptions;\n  screen: ListTableScreen;\n  childBase: number;\n  ibottom: number;\n  ileft: number;\n  visible?: boolean;\n  lpos?: any;\n  selected: number;\n  items: any[];\n  ritems: string[];\n  on(event: string, listener: (...args: any[]) => void): void;\n  emit(event: string, ...args: any[]): boolean;\n  clearPos(): void;\n  clearItems(): void;\n  addItem(item: string): void;\n  strWidth(str: string): number;\n  setScroll(offset: number): void;\n  scrollTo(index: number): void;\n  sattr(style: any): number;\n  _calculateMaxes(): void;\n  setRows(rows: string[][]): void;\n  setData(rows: string[][]): void;\n  _select(index: number): void;\n  select(index: number): void;\n  render(): ListTableCoords | undefined;\n  _render(): ListTableCoords | undefined;\n}\n\n/**\n * ListTable - Modern ES6 Class\n */\n\nclass ListTable extends List {\n  type = 'list-table';\n  __align: 'left' | 'center' | 'right';\n  _header: ListTableHeader;\n  pad: number;\n  rows: string[][];\n  _maxes?: number[];\n\n  constructor(options?: ListTableOptions) {\n    // Handle malformed options gracefully\n    if (!options || typeof options !== 'object' || Array.isArray(options)) {\n      options = {};\n    }\n\n    // Prepare options for List constructor\n    options.normalShrink = true;\n    options.style = options.style || {};\n    options.style.border = options.style.border || {};\n    options.style.header = options.style.header || {};\n    options.style.cell = options.style.cell || {};\n\n    // Store alignment and remove from options before passing to parent\n    const align = options.align || 'center';\n    delete options.align;\n\n    // Set up cell styles for list selection\n    options.style.selected = options.style.cell!.selected;\n    options.style.item = options.style.cell;\n\n    // Handle border options\n    const border = options.border;\n    if (\n      border &&\n      border.top === false &&\n      border.bottom === false &&\n      border.left === false &&\n      border.right === false\n    ) {\n      delete options.border;\n    }\n\n    super(options);\n\n    // Restore border after parent constructor\n    this.options.border = border;\n\n    // Initialize listtable-specific properties\n    this.__align = align;\n    this.pad = options.pad != null ? options.pad : 2;\n    this.rows = [];\n\n    // Create header element\n    this._header = new Box({\n      parent: this,\n      left: this.screen.autoPadding ? 0 : this.ileft,\n      top: 0,\n      width: 'shrink',\n      height: 1,\n      style: options.style.header,\n      tags: options.parseTags || options.tags,\n    });\n\n    // Set up event handlers\n    this.on('scroll', () => {\n      this._header.setFront();\n      this._header.rtop = this.childBase;\n      if (!this.screen.autoPadding) {\n        this._header.rtop = this.childBase + (this.border ? 1 : 0);\n      }\n    });\n\n    this.on('attach', () => {\n      this.setData(this.rows);\n    });\n\n    this.on('resize', () => {\n      const selected = this.selected;\n      this.setData(this.rows);\n      this.select(selected);\n      this.screen.render();\n    });\n\n    // Initialize with data if provided\n    this.setData(options.rows || options.data);\n  }\n\n  _calculateMaxes(): void {\n    // Use Table's _calculateMaxes implementation\n    const tableProto = Table.prototype as any;\n    if (tableProto._calculateMaxes) {\n      this._maxes = tableProto._calculateMaxes.call(this);\n    }\n  }\n\n  setRows(rows?: string[][]): void {\n    this.setData(rows);\n  }\n\n  setData(rows?: string[][]): void {\n    const align = this.__align;\n    const selected = this.selected;\n    const original = this.items.slice();\n    let sel = this.ritems[this.selected];\n\n    if (this.visible && this.lpos) {\n      this.clearPos();\n    }\n\n    this.clearItems();\n\n    this.rows = rows || [];\n\n    this._calculateMaxes();\n\n    if (!this._maxes) return;\n\n    this.addItem('');\n\n    this.rows.forEach((row: string[], i: number) => {\n      const isHeader = i === 0;\n      let text = '';\n      row.forEach((cell: string, i: number) => {\n        const width = this._maxes![i];\n        let clen = this.strWidth(cell);\n\n        if (i !== 0) {\n          text += ' ';\n        }\n\n        while (clen < width) {\n          if (align === 'center') {\n            cell = ' ' + cell + ' ';\n            clen += 2;\n          } else if (align === 'left') {\n            cell = cell + ' ';\n            clen += 1;\n          } else if (align === 'right') {\n            cell = ' ' + cell;\n            clen += 1;\n          }\n        }\n\n        if (clen > width) {\n          if (align === 'center') {\n            cell = cell.substring(1);\n            clen--;\n          } else if (align === 'left') {\n            cell = cell.slice(0, -1);\n            clen--;\n          } else if (align === 'right') {\n            cell = cell.substring(1);\n            clen--;\n          }\n        }\n\n        text += cell;\n      });\n      if (isHeader) {\n        this._header.setContent(text);\n      } else {\n        this.addItem(text);\n      }\n    });\n\n    this._header.setFront();\n\n    // Try to find our old item if it still exists.\n    sel = this.ritems.indexOf(sel);\n    if (~sel) {\n      this.select(sel);\n    } else if (this.items.length === original.length) {\n      this.select(selected);\n    } else {\n      this.select(Math.min(selected, this.items.length - 1));\n    }\n  }\n\n  select(i: number): void {\n    if (i === 0) {\n      i = 1;\n    }\n    if (i <= this.childBase) {\n      this.setScroll(this.childBase - 1);\n    }\n    super.select(i);\n    // Correct scrolling for header offset.\n    this.scrollTo(this.selected - 1);\n    if (this.rows && this.selected) {\n      this.emit('selectrow', this.rows[this.selected], this.selected);\n    }\n  }\n\n  render(): ListTableCoords | undefined {\n    const coords = this._render();\n    if (!coords) return;\n\n    this._calculateMaxes();\n\n    if (!this._maxes) return coords;\n\n    const lines = this.screen.lines;\n    const xi = coords.xi;\n    const yi = coords.yi;\n    let rx: number;\n    let ry: number;\n    let i: number;\n\n    const battr = this.sattr(this.style.border);\n\n    const height = coords.yl - coords.yi - this.ibottom;\n\n    let border = this.border;\n    if (!this.border && this.options.border) {\n      border = this.options.border;\n    }\n\n    if (!border || this.options.noCellBorders) return coords;\n\n    // Draw border with correct angles.\n    ry = 0;\n    for (i = 0; i < height + 1; i++) {\n      if (!lines[yi + ry]) break;\n      rx = 0;\n      this._maxes!.slice(0, -1).forEach((max: number) => {\n        rx += max;\n        if (!lines[yi + ry][xi + rx + 1]) return;\n        // center\n        if (ry === 0) {\n          // top\n          rx++;\n          lines[yi + ry][xi + rx][0] = battr;\n          lines[yi + ry][xi + rx][1] = '\\u252c'; // '┬'\n          // XXX If we alter iheight and itop for no borders - nothing should be written here\n          if (!border.top) {\n            lines[yi + ry][xi + rx][1] = '\\u2502'; // '│'\n          }\n          lines[yi + ry].dirty = true;\n        } else if (ry === height) {\n          // bottom\n          rx++;\n          lines[yi + ry][xi + rx][0] = battr;\n          lines[yi + ry][xi + rx][1] = '\\u2534'; // '┴'\n          // XXX If we alter iheight and ibottom for no borders - nothing should be written here\n          if (!border.bottom) {\n            lines[yi + ry][xi + rx][1] = '\\u2502'; // '│'\n          }\n          lines[yi + ry].dirty = true;\n        } else {\n          // middle\n          rx++;\n        }\n      });\n      ry += 1;\n    }\n\n    // Draw internal borders.\n    for (ry = 1; ry < height; ry++) {\n      if (!lines[yi + ry]) break;\n      rx = 0;\n      this._maxes!.slice(0, -1).forEach((max: number) => {\n        rx += max;\n        if (!lines[yi + ry][xi + rx + 1]) return;\n        if (this.options.fillCellBorders !== false) {\n          const lbg = lines[yi + ry][xi + rx][0] & 0x1ff;\n          rx++;\n          lines[yi + ry][xi + rx][0] = (battr & ~0x1ff) | lbg;\n        } else {\n          rx++;\n          lines[yi + ry][xi + rx][0] = battr;\n        }\n        lines[yi + ry][xi + rx][1] = '\\u2502'; // '│'\n        lines[yi + ry].dirty = true;\n      });\n    }\n\n    return coords;\n  }\n}\n\n/**\n * Factory function for backward compatibility\n */\nfunction listTable(options?: ListTableOptions): ListTableInterface {\n  return new ListTable(options) as ListTableInterface;\n}\n\n// Attach the class as a property for direct access\nlistTable.ListTable = ListTable;\n\n/**\n * Expose\n */\n\nexport default listTable;\n","/**\n * terminal.js - terminal element for blessed\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\n/**\n * Modules\n */\n\nimport Node from './node.js';\nimport boxFactory from './box.js';\nconst Box = boxFactory.Box;\nimport * as xterm from '@xterm/headless';\nconst XTerminal = xterm.Terminal;\n// Lazy-load node-pty only when Terminal is instantiated to avoid\n// requiring it at package import time.\nimport { createRequire } from 'module';\nconst _require: NodeJS.Require = (typeof require === 'function'\n  ? require\n  : createRequire(import.meta.url)) as unknown as NodeJS.Require;\n\nfunction getSpawn() {\n  try {\n    const pty = _require('node-pty');\n    // Support both default and named exports\n    return (pty && (pty.spawn || pty.default?.spawn)) || null;\n  } catch {\n    return null;\n  }\n}\nimport { match, vcolors } from '../colors.js';\n\n/**\n * Type definitions\n */\n\nimport { TerminalOptions, TerminalInterface } from '../types/widgets';\n\n/**\n * Terminal - Modern ES6 Class\n */\n\nclass Terminal extends Box {\n  type = 'terminal';\n  shell: string;\n  args: string[];\n  term: any;\n  pty: any;\n  _onData: Function;\n  _rawAnsiBuffer: string;\n\n  constructor(options?: TerminalOptions) {\n    // Handle malformed options gracefully\n    if (!options || typeof options !== 'object' || Array.isArray(options)) {\n      options = {};\n    }\n\n    super(options);\n\n    this.shell = options.shell || process.env.SHELL || 'bash';\n    this.args = options.args || [];\n\n    this.bootstrap(options);\n  }\n\n  bootstrap(options: TerminalOptions) {\n    var cols = 80;\n    var rows = 24;\n\n    if (this.width > 0 && this.height > 0) {\n      cols = Math.max(this.width - this.iwidth, 1);\n      rows = Math.max(this.height - this.iheight, 1);\n    }\n\n    this.term = new XTerminal({\n      cols: cols,\n      rows: rows,\n      scrollback: 5000,\n      allowProposedApi: true,\n      // Enhanced color support configuration\n      allowTransparency: true,\n      drawBoldTextInBrightColors: true,\n      // Enable all color modes for maximum compatibility\n      minimumContrastRatio: 1,\n      // Advanced features for better compatibility\n      convertEol: false, // Don't convert \\n to \\r\\n (preserves original formatting)\n      disableStdin: false, // Allow input handling\n      cursorBlink: options.cursorBlink || false,\n      cursorStyle: 'block', // Default cursor style\n      altClickMovesCursor: false, // Disable alt-click cursor movement for compatibility\n      rightClickSelectsWord: false, // Disable right-click selection to avoid conflicts\n      fastScrollModifier: 'none', // Disable fast scroll modifiers\n      wordSeparator: ' ()[]{},\"\\':;', // Standard word separators\n    });\n\n    const spawn = getSpawn();\n    if (spawn) {\n      this.pty = spawn(this.shell, this.args, {\n        cols: cols,\n        rows: rows,\n        cwd: process.env.HOME,\n      });\n\n      this.term.onData(d => this.pty && this.pty.write(d));\n    } else {\n      this.pty = null as any;\n    }\n\n    // Store raw ANSI sequences with line tracking for tmux-like passthrough\n    this._rawAnsiBuffer = '';\n\n    if (this.pty && typeof this.pty.onData === 'function') {\n      this.pty.onData((d: any) => {\n        const data = d.toString();\n\n        // Store raw ANSI data - keep it organized by recent output\n        this._rawAnsiBuffer = data; // Only keep the most recent chunk for direct replay\n\n        // Send to xterm.js for structural processing\n        this.term.write(d);\n      });\n    }\n\n    if (\n      this.screen.program.input &&\n      typeof this.screen.program.input.on === 'function'\n    ) {\n      this.screen.program.input.on(\n        'data',\n        (this._onData = (data: any) => {\n          if (this.screen.focused === this) {\n            this.term.input(data.toString());\n          }\n        })\n      );\n    }\n\n    if (this.pty && typeof this.pty.onData === 'function') {\n      this.pty.onData(() => {\n        // Auto-scroll to bottom when new content arrives\n        if (this.term && typeof this.term.scrollToBottom === 'function') {\n          this.term.scrollToBottom();\n        }\n        setTimeout(() => this.screen.render(), 16);\n      });\n    }\n\n    this.on('resize', () => {\n      var cols = Math.max(this.width - this.iwidth, 1);\n      var rows = Math.max(this.height - this.iheight, 1);\n      this.term.resize(cols, rows);\n      if (this.pty && typeof this.pty.resize === 'function') {\n        this.pty.resize(cols, rows);\n      }\n    });\n\n    this.once('render', () => {\n      var actualCols = Math.max(this.width - this.iwidth, 1);\n      var actualRows = Math.max(this.height - this.iheight, 1);\n      if (actualCols !== cols || actualRows !== rows) {\n        this.term.resize(actualCols, actualRows);\n        if (this.pty && typeof this.pty.resize === 'function') {\n          this.pty.resize(actualCols, actualRows);\n        }\n      }\n    });\n\n    this.on('destroy', () => this.kill());\n  }\n\n  extractColor(cell: any, type: 'foreground' | 'background'): number {\n    // Check if it's default color first\n    if (type === 'foreground' && cell.isFgDefault()) {\n      return -1;\n    }\n    if (type === 'background' && cell.isBgDefault()) {\n      return -1;\n    }\n\n    const color = type === 'foreground' ? cell.getFgColor() : cell.getBgColor();\n\n    // Handle RGB colors (24-bit true color)\n    if (type === 'foreground' ? cell.isFgRGB() : cell.isBgRGB()) {\n      // For RGB mode, color is 0xRRGGBB\n      const r = (color >> 16) & 0xff;\n      const g = (color >> 8) & 0xff;\n      const b = color & 0xff;\n\n      // Use blessed's color matching to find closest terminal color\n      return match(r, g, b);\n    }\n\n    // Handle 256-color palette mode\n    if (type === 'foreground' ? cell.isFgPalette() : cell.isBgPalette()) {\n      // In palette mode, color is directly the palette index (0-255)\n      return color >= 0 && color <= 255 ? color : -1;\n    }\n\n    // Fallback for any other cases\n    return -1;\n  }\n\n  render() {\n    var ret = this._render();\n    if (!ret) return;\n\n    var xi = ret.xi + this.ileft;\n    var xl = ret.xl - this.iright;\n    var yi = ret.yi + this.itop;\n    var yl = ret.yl - this.ibottom;\n\n    xi = Math.max(xi, 0);\n    xl = Math.min(xl, this.screen.width);\n    yi = Math.max(yi, 0);\n    yl = Math.min(yl, this.screen.height);\n\n    if (xi >= xl || yi >= yl) return ret;\n\n    const buf = this.term.buffer.active;\n    const viewportY = buf.viewportY || 0; // Get the current scroll position\n\n    for (var y = yi; y < yl; y++) {\n      var line = this.screen.lines[y];\n      if (!line) continue;\n\n      var bufferY = y - yi + viewportY; // Account for scroll position\n      var bufferLine = buf.getLine(bufferY);\n      if (!bufferLine) continue;\n\n      for (var x = xi; x < xl; x++) {\n        if (!line[x]) continue;\n\n        var cellX = x - xi;\n        var cell = bufferLine.getCell(cellX);\n        if (!cell) continue;\n\n        // Enhanced character handling for Unicode\n        var chars = cell.getChars();\n        if (!chars || chars === '') {\n          chars = ' ';\n        }\n        line[x][1] = chars;\n\n        // Use new 24-bit color format\n        var attr = this.dattr || 0x07 * 0x1000000; // fg=7, bg=0\n\n        // Enhanced attribute support (flags now using Math operations)\n        var flags = 0;\n        if (cell.isBold()) flags |= 1;\n        if (cell.isUnderline()) flags |= 2;\n        if (cell.isInverse()) flags |= 8;\n        if (cell.isDim()) flags |= 4;\n        if (cell.isItalic()) flags |= 16;\n        if (cell.isStrikethrough()) flags |= 32;\n        if (cell.isBlink()) flags |= 64;\n        if (cell.isInvisible()) flags |= 128;\n        if (cell.isOverline()) flags |= 256;\n\n        // 24-bit RGB color extraction\n        var fg = 0xffffff; // default (means use default)\n        var bg = 0xffffff; // default (means use default)\n\n        if (!cell.isFgDefault()) {\n          if (cell.isFgRGB()) {\n            // Store full RGB value directly\n            fg = cell.getFgColor(); // Already in 0xRRGGBB format\n          } else if (cell.isFgPalette()) {\n            // Keep palette colors as-is (0-255)\n            fg = cell.getFgColor();\n          }\n        }\n\n        if (!cell.isBgDefault()) {\n          if (cell.isBgRGB()) {\n            // Store full RGB value directly\n            bg = cell.getBgColor(); // Already in 0xRRGGBB format\n          } else if (cell.isBgPalette()) {\n            // Keep palette colors as-is (0-255)\n            bg = cell.getBgColor();\n          }\n        }\n\n        // Pack into new format: bg + (fg * 2^24) + (flags * 2^48)\n        attr = bg + fg * 0x1000000 + flags * 0x1000000000000;\n\n        line[x][0] = attr;\n      }\n      line.dirty = true;\n    }\n\n    return ret;\n  }\n\n  write(data: string) {\n    if (this.term) {\n      this.term.write(data);\n    }\n  }\n\n  scrollTo(line: number): void {\n    if (this.term && typeof this.term.scrollToLine === 'function') {\n      this.term.scrollToLine(line);\n    }\n  }\n\n  scroll(offset: number): void {\n    if (this.term && typeof this.term.scrollLines === 'function') {\n      this.term.scrollLines(offset);\n    }\n  }\n\n  scrollToTop(): void {\n    if (this.term && typeof this.term.scrollToTop === 'function') {\n      this.term.scrollToTop();\n    }\n  }\n\n  scrollToBottom(): void {\n    if (this.term && typeof this.term.scrollToBottom === 'function') {\n      this.term.scrollToBottom();\n    }\n  }\n\n  kill() {\n    if (this.pty) this.pty.kill();\n    if (this.term) this.term.dispose();\n    if (\n      this.screen.program.input &&\n      typeof this.screen.program.input.removeListener === 'function'\n    ) {\n      this.screen.program.input.removeListener('data', this._onData);\n    } else if (\n      this.screen.program.input &&\n      typeof this.screen.program.input.off === 'function'\n    ) {\n      this.screen.program.input.off('data', this._onData);\n    }\n  }\n}\n\n/**\n * Factory function for backward compatibility\n */\nfunction terminal(options?: TerminalOptions): TerminalInterface {\n  return new Terminal(options) as TerminalInterface;\n}\n\n// Attach the class as a property for direct access\nterminal.Terminal = Terminal;\n\n/**\n * Expose\n */\n\nexport default terminal;\n","/**\n * image.js - image element for blessed\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\n/**\n * Modules\n */\n\nimport Node from './node.js';\nimport boxFactory from './box.js';\nconst Box = boxFactory.Box;\nimport ansiimage from './ansiimage.js';\nimport overlayimage from './overlayimage.js';\n\n/**\n * Interfaces\n */\n\ninterface ImageOptions {\n  type?: 'ansi' | 'overlay';\n  itype?: 'ansi' | 'overlay';\n  [key: string]: any;\n}\n\ninterface ImageInterface extends Box {\n  type: string;\n}\n\n/**\n * Image - Modern ES6 Class\n */\n\nclass Image extends Box {\n  type = 'image';\n\n  constructor(options?: ImageOptions) {\n    // Handle malformed options gracefully\n    if (!options || typeof options !== 'object' || Array.isArray(options)) {\n      options = {};\n    }\n\n    // Set image type with fallback to 'ansi'\n    options.type = options.itype || options.type || 'ansi';\n\n    super(options);\n\n    // Handle image type delegation with ES6 classes\n    if (options.type === 'ansi' && this.type !== 'ansiimage') {\n      // Return a new ANSIImage instance instead of prototype manipulation\n      return new ansiimage.ANSIImage(options) as any;\n    }\n\n    if (options.type === 'overlay' && this.type !== 'overlayimage') {\n      // Return a new OverlayImage instance instead of prototype manipulation\n      return new overlayimage.OverlayImage(options) as any;\n    }\n\n    throw new Error('`type` must either be `ansi` or `overlay`.');\n  }\n}\n\n/**\n * Factory function for backward compatibility\n */\nfunction image(options?: ImageOptions): ImageInterface {\n  return new Image(options) as ImageInterface;\n}\n\n// Attach the class as a property for direct access\nimage.Image = Image;\n\n/**\n * Expose\n */\n\nexport default image;\n","/**\n * ansiimage.js - render PNGS/GIFS as ANSI\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\n/**\n * Modules\n */\n\nimport * as cp from 'child_process';\n\nimport * as colors from '../colors.js';\n\nimport BlessedNode from './node.js';\nimport boxFactory from './box.js';\nconst BlessedBox = boxFactory.Box;\n\nimport processImage from '../image-processor.js';\n\n/**\n * Interfaces\n */\n\ninterface ANSIImageOptions {\n  scale?: number;\n  animate?: boolean;\n  file?: string;\n  ascii?: boolean;\n  speed?: number;\n  shrink?: boolean;\n  [key: string]: any;\n}\n\ninterface CellMap {\n  [row: number]: any[];\n  length: number;\n}\n\ninterface TngImage {\n  cellmap: CellMap;\n  frames?: any[];\n  play(callback: (bmp: any, cellmap: CellMap) => void): any;\n  pause(): any;\n  stop(): any;\n  renderElement(cellmap: CellMap, element: any): void;\n}\n\ninterface ANSIImageScreen {\n  clearRegion(xi: number, xl: number, yi: number, yl: number): void;\n  render(): void;\n  on(event: string, listener: Function): void;\n}\n\ninterface ANSIImagePosition {\n  width?: number;\n  height?: number;\n  [key: string]: any;\n}\n\ninterface ANSIImageCoords {\n  xi: number;\n  xl: number;\n  yi: number;\n  yl: number;\n}\n\ninterface ANSIImageInterface extends any {\n  type: string;\n  scale: number;\n  options: ANSIImageOptions;\n  _noFill: boolean;\n  file?: string;\n  img?: TngImage;\n  cellmap?: CellMap;\n  screen: ANSIImageScreen;\n  position: ANSIImagePosition;\n  width: number;\n  height: number;\n  lpos?: ANSIImageCoords;\n\n  // Methods\n  setImage(file: string | Buffer): void;\n  play(): any;\n  pause(): any;\n  stop(): any;\n  clearImage(): void;\n  render(): ANSIImageCoords | undefined;\n  _render(): ANSIImageCoords | undefined;\n  setContent(content: string): void;\n  on(event: string, listener: Function): void;\n}\n\n/**\n * ANSIImage - Modern ES6 Class\n */\n\nclass ANSIImage extends BlessedBox {\n  type = 'ansiimage';\n  scale: number;\n  _noFill: boolean = true;\n  file?: string;\n  img?: TngImage;\n  cellmap?: CellMap;\n\n  constructor(options?: ANSIImageOptions) {\n    // Handle malformed options gracefully\n    if (!options || typeof options !== 'object' || Array.isArray(options)) {\n      options = {};\n    }\n\n    // Ensure shrink is set\n    options.shrink = true;\n\n    super(options);\n\n    this.scale = this.options.scale || 1.0;\n    this.options.animate = this.options.animate !== false;\n    this._noFill = true;\n\n    if (this.options.file) {\n      this.setImage(this.options.file);\n    }\n\n    // Set up prerender handler to prevent image blending\n    this.screen.on('prerender', () => {\n      const lpos = this.lpos;\n      if (!lpos) return;\n      // prevent image from blending with itself if there are alpha channels\n      this.screen.clearRegion(lpos.xi, lpos.xl, lpos.yi, lpos.yl);\n    });\n\n    // Set up destroy handler\n    this.on('destroy', () => {\n      this.stop();\n    });\n  }\n\n  static curl(url: string): Buffer {\n    try {\n      return cp.execFileSync('curl', ['-s', '-A', '', url], {\n        stdio: ['ignore', 'pipe', 'ignore'],\n      });\n    } catch (e) {}\n    try {\n      return cp.execFileSync('wget', ['-U', '', '-O', '-', url], {\n        stdio: ['ignore', 'pipe', 'ignore'],\n      });\n    } catch (e) {}\n    throw new Error('curl or wget failed.');\n  }\n\n  setImage(file: string | Buffer): void {\n    this.file = typeof file === 'string' ? file : null;\n\n    if (typeof file === 'string' && /^https?:/.test(file)) {\n      file = ANSIImage.curl(file);\n    }\n\n    let width = this.position.width;\n    let height = this.position.height;\n\n    if (width != null) {\n      width = this.width;\n    }\n\n    if (height != null) {\n      height = this.height;\n    }\n\n    try {\n      this.setContent('');\n\n      this.img = processImage(file, {\n        colors: colors,\n        width: width,\n        height: height,\n        scale: this.scale,\n        ascii: this.options.ascii,\n        speed: this.options.speed,\n        filename: this.file,\n      }) as TngImage;\n\n      if (width == null || height == null) {\n        this.width = this.img.cellmap[0].length;\n        this.height = this.img.cellmap.length;\n      }\n\n      if (this.img.frames && this.options.animate) {\n        this.play();\n      } else {\n        this.cellmap = this.img.cellmap;\n      }\n    } catch (e: any) {\n      this.setContent('Image Error: ' + e.message);\n      this.img = undefined;\n      this.cellmap = undefined;\n    }\n  }\n\n  play(): any {\n    if (!this.img) return;\n    return this.img.play((bmp: any, cellmap: CellMap) => {\n      this.cellmap = cellmap;\n      this.screen.render();\n    });\n  }\n\n  pause(): any {\n    if (!this.img) return;\n    return this.img.pause();\n  }\n\n  stop(): any {\n    if (!this.img) return;\n    return this.img.stop();\n  }\n\n  clearImage(): void {\n    this.stop();\n    this.setContent('');\n    this.img = undefined;\n    this.cellmap = undefined;\n  }\n\n  render(): ANSIImageCoords | undefined {\n    const coords = this._render();\n    if (!coords) return;\n\n    if (this.img && this.cellmap) {\n      this.img.renderElement(this.cellmap, this);\n    }\n\n    return coords;\n  }\n}\n\n/**\n * Factory function for backward compatibility\n */\nfunction ansiImage(options?: ANSIImageOptions): ANSIImageInterface {\n  return new ANSIImage(options) as ANSIImageInterface;\n}\n\n// Attach the class as a property for direct access\nansiImage.ANSIImage = ANSIImage;\n\n/**\n * Expose\n */\n\nexport default ansiImage;\n","/**\n * overlayimage.js - w3m image element for blessed\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\n/**\n * Modules\n */\n\nimport * as fs from 'fs';\nimport * as cp from 'child_process';\nimport { spawn } from 'child_process';\n\nimport * as helpers from '../helpers.js';\n\nimport Node from './node.js';\nimport boxFactory from './box.js';\nconst Box = boxFactory.Box;\n\n/**\n * Interfaces\n */\n\ninterface OverlayImageOptions {\n  w3m?: string;\n  search?: boolean;\n  file?: string;\n  img?: string;\n  shrink?: boolean;\n  autofit?: boolean;\n  [key: string]: any;\n}\n\ninterface ImageSize {\n  raw: string;\n  width: number;\n  height: number;\n}\n\ninterface PixelRatio {\n  tw: number;\n  th: number;\n}\n\ninterface ImageProps {\n  aleft: number;\n  atop: number;\n  width: number;\n  height: number;\n}\n\ninterface LastSize {\n  tw: number;\n  th: number;\n  width: number;\n  height: number;\n  aleft: number;\n  atop: number;\n}\n\ninterface OverlayImageScreen {\n  width: number;\n  height: number;\n  program: {\n    flush(): void;\n  };\n  render(): void;\n  displayImage(file: string, callback?: Function): any;\n}\n\ninterface OverlayImagePosition {\n  width?: number;\n  height?: number;\n  [key: string]: any;\n}\n\ninterface OverlayImageInterface extends Box {\n  type: string;\n  file?: string;\n  _lastFile?: string;\n  _needsRatio?: boolean;\n  _noImage?: boolean;\n  _settingImage?: boolean;\n  _queue?: [string, Function?][];\n  _props?: ImageProps;\n  _lastSize?: LastSize;\n  _ratio?: PixelRatio;\n  _drag?: boolean;\n  screen: OverlayImageScreen;\n  options: OverlayImageOptions;\n  position: OverlayImagePosition;\n  width: number;\n  height: number;\n  aleft: number;\n  atop: number;\n  shrink?: boolean;\n\n  // Methods\n  spawn(file: string, args: string[], opt?: any, callback?: Function): any;\n  setImage(img: string, callback?: Function): any;\n  renderImage(img: string, ratio: PixelRatio, callback?: Function): any;\n  clearImage(callback?: Function): any;\n  imageSize(callback?: Function): any;\n  termSize(callback?: Function): any;\n  getPixelRatio(callback?: Function): any;\n  renderImageSync(img: string, ratio: PixelRatio): boolean;\n  clearImageSync(): boolean;\n  imageSizeSync(): ImageSize;\n  termSizeSync(unused?: any, recurse?: number): ImageSize;\n  getPixelRatioSync(): PixelRatio;\n  displayImage(callback?: Function): any;\n  onScreenEvent(event: string, listener: Function): void;\n}\n\n/**\n * OverlayImage - Modern ES6 Class\n * Good example of w3mimgdisplay commands:\n * https://github.com/hut/ranger/blob/master/ranger/ext/img_display.py\n */\n\nclass OverlayImage extends Box {\n  type = 'overlayimage';\n\n  // Static properties\n  static w3mdisplay = '/usr/lib/w3m/w3mimgdisplay';\n  static hasW3MDisplay: boolean | null = null;\n\n  // Instance properties\n  file?: string;\n  _lastFile?: string;\n  _needsRatio?: boolean;\n  _noImage?: boolean;\n  _settingImage?: boolean;\n  _queue?: [string, Function?][];\n  _props?: ImageProps;\n  _lastSize?: LastSize;\n  _ratio?: PixelRatio;\n  _drag?: boolean;\n  shrink?: boolean;\n\n  constructor(options?: OverlayImageOptions) {\n    // Handle malformed options gracefully\n    if (!options || typeof options !== 'object' || Array.isArray(options)) {\n      options = {};\n    }\n\n    super(options);\n\n    // Setup w3m display path\n    if (options.w3m) {\n      OverlayImage.w3mdisplay = options.w3m;\n    }\n\n    // Initialize w3m display availability\n    if (OverlayImage.hasW3MDisplay == null) {\n      if (fs.existsSync(OverlayImage.w3mdisplay)) {\n        OverlayImage.hasW3MDisplay = true;\n      } else if (options.search !== false) {\n        var file =\n          helpers.findFile('/usr', 'w3mimgdisplay') ||\n          helpers.findFile('/lib', 'w3mimgdisplay') ||\n          helpers.findFile('/bin', 'w3mimgdisplay');\n        if (file) {\n          OverlayImage.hasW3MDisplay = true;\n          OverlayImage.w3mdisplay = file;\n        } else {\n          OverlayImage.hasW3MDisplay = false;\n        }\n      }\n    }\n\n    // Setup event handlers\n    this.on('hide', () => {\n      this._lastFile = this.file;\n      this.clearImage();\n    });\n\n    this.on('show', () => {\n      if (!this._lastFile) return;\n      this.setImage(this._lastFile);\n    });\n\n    this.on('detach', () => {\n      this._lastFile = this.file;\n      this.clearImage();\n    });\n\n    this.on('attach', () => {\n      if (!this._lastFile) return;\n      this.setImage(this._lastFile);\n    });\n\n    this.onScreenEvent('resize', () => {\n      this._needsRatio = true;\n    });\n\n    // Get images to overlap properly. Maybe not worth it:\n    // this.onScreenEvent('render', function() {\n    //   self.screen.program.flush();\n    //   if (!self._noImage) return;\n    //   function display(el, next) {\n    //     if (el.type === 'w3mimage' && el.file) {\n    //       el.setImage(el.file, next);\n    //     } else {\n    //       next();\n    //     }\n    //   }\n    //   function done(el) {\n    //     el.children.forEach(recurse);\n    //   }\n    //   function recurse(el) {\n    //     display(el, function() {\n    //       var pending = el.children.length;\n    //       el.children.forEach(function(el) {\n    //         display(el, function() {\n    //           if (!--pending) done(el);\n    //         });\n    //       });\n    //     });\n    //   }\n    //   recurse(self.screen);\n    // });\n\n    this.onScreenEvent('render', () => {\n      this.screen.program.flush();\n      if (!this._noImage) {\n        this.setImage(this.file);\n      }\n    });\n\n    // Initialize image if provided\n    if (this.options.file || this.options.img) {\n      this.setImage(this.options.file || this.options.img);\n    }\n  }\n\n  spawn(file: string, args: string[], opt?: any, callback?: Function) {\n    opt = opt || {};\n    const ps = spawn(file, args, opt);\n\n    ps.on('error', function (err) {\n      if (!callback) return;\n      return callback(err);\n    });\n\n    ps.on('exit', function (code) {\n      if (!callback) return;\n      if (code !== 0) return callback(new Error('Exit Code: ' + code));\n      return callback(null, code === 0);\n    });\n\n    return ps;\n  }\n\n  setImage(img: string, callback?: Function) {\n    if (this._settingImage) {\n      this._queue = this._queue || [];\n      this._queue.push([img, callback]);\n      return;\n    }\n    this._settingImage = true;\n\n    const reset = () => {\n      this._settingImage = false;\n      this._queue = this._queue || [];\n      var item = this._queue.shift();\n      if (item) {\n        this.setImage(item[0], item[1]);\n      }\n    };\n\n    if (OverlayImage.hasW3MDisplay === false) {\n      reset();\n      if (!callback) return;\n      return callback(new Error('W3M Image Display not available.'));\n    }\n\n    if (!img) {\n      reset();\n      if (!callback) return;\n      return callback(new Error('No image.'));\n    }\n\n    this.file = img;\n\n    return this.getPixelRatio((err, ratio) => {\n      if (err) {\n        reset();\n        if (!callback) return;\n        return callback(err);\n      }\n\n      return this.renderImage(img, ratio, (err, success) => {\n        if (err) {\n          reset();\n          if (!callback) return;\n          return callback(err);\n        }\n\n        if (this.shrink || this.options.autofit) {\n          delete this.shrink;\n          delete this.options.shrink;\n          this.options.autofit = true;\n          return this.imageSize((err, size) => {\n            if (err) {\n              reset();\n              if (!callback) return;\n              return callback(err);\n            }\n\n            if (\n              this._lastSize &&\n              ratio.tw === this._lastSize.tw &&\n              ratio.th === this._lastSize.th &&\n              size.width === this._lastSize.width &&\n              size.height === this._lastSize.height &&\n              this.aleft === this._lastSize.aleft &&\n              this.atop === this._lastSize.atop\n            ) {\n              reset();\n              if (!callback) return;\n              return callback(null, success);\n            }\n\n            this._lastSize = {\n              tw: ratio.tw,\n              th: ratio.th,\n              width: size.width,\n              height: size.height,\n              aleft: this.aleft,\n              atop: this.atop,\n            };\n\n            this.position.width = (size.width / ratio.tw) | 0;\n            this.position.height = (size.height / ratio.th) | 0;\n\n            this._noImage = true;\n            this.screen.render();\n            this._noImage = false;\n\n            reset();\n            return this.renderImage(img, ratio, callback);\n          });\n        }\n\n        reset();\n        if (!callback) return;\n        return callback(null, success);\n      });\n    });\n  }\n\n  renderImage(img: string, ratio: PixelRatio, callback?: Function) {\n    if (cp.execSync) {\n      callback =\n        callback ||\n        function (err, result) {\n          return result;\n        };\n      try {\n        return callback(null, this.renderImageSync(img, ratio));\n      } catch (e) {\n        return callback(e);\n      }\n    }\n\n    if (OverlayImage.hasW3MDisplay === false) {\n      if (!callback) return;\n      return callback(new Error('W3M Image Display not available.'));\n    }\n\n    if (!ratio) {\n      if (!callback) return;\n      return callback(new Error('No ratio.'));\n    }\n\n    // clearImage unsets these:\n    var _file = this.file;\n    var _lastSize = this._lastSize;\n    return this.clearImage(err => {\n      if (err) return callback(err);\n\n      this.file = _file;\n      this._lastSize = _lastSize;\n\n      var opt = {\n        stdio: 'pipe',\n        env: process.env,\n        cwd: process.env.HOME,\n      };\n\n      var ps = this.spawn(\n        OverlayImage.w3mdisplay,\n        [],\n        opt,\n        function (err, success) {\n          if (!callback) return;\n          return err ? callback(err) : callback(null, success);\n        }\n      );\n\n      var width = (this.width * ratio.tw) | 0,\n        height = (this.height * ratio.th) | 0,\n        aleft = (this.aleft * ratio.tw) | 0,\n        atop = (this.atop * ratio.th) | 0;\n\n      var input =\n        '0;1;' +\n        aleft +\n        ';' +\n        atop +\n        ';' +\n        width +\n        ';' +\n        height +\n        ';;;;;' +\n        img +\n        '\\n4;\\n3;\\n';\n\n      this._props = {\n        aleft: aleft,\n        atop: atop,\n        width: width,\n        height: height,\n      };\n\n      ps.stdin.write(input);\n      ps.stdin.end();\n    });\n  }\n\n  clearImage(callback?: Function) {\n    if (cp.execSync) {\n      callback =\n        callback ||\n        function (err, result) {\n          return result;\n        };\n      try {\n        return callback(null, this.clearImageSync());\n      } catch (e) {\n        return callback(e);\n      }\n    }\n\n    if (OverlayImage.hasW3MDisplay === false) {\n      if (!callback) return;\n      return callback(new Error('W3M Image Display not available.'));\n    }\n\n    if (!this._props) {\n      if (!callback) return;\n      return callback(null);\n    }\n\n    var opt = {\n      stdio: 'pipe',\n      env: process.env,\n      cwd: process.env.HOME,\n    };\n\n    var ps = this.spawn(\n      OverlayImage.w3mdisplay,\n      [],\n      opt,\n      function (err, success) {\n        if (!callback) return;\n        return err ? callback(err) : callback(null, success);\n      }\n    );\n\n    var width = this._props.width + 2,\n      height = this._props.height + 2,\n      aleft = this._props.aleft,\n      atop = this._props.atop;\n\n    if (this._drag) {\n      aleft -= 10;\n      atop -= 10;\n      width += 10;\n      height += 10;\n    }\n\n    var input =\n      '6;' + aleft + ';' + atop + ';' + width + ';' + height + '\\n4;\\n3;\\n';\n\n    delete this.file;\n    delete this._props;\n    delete this._lastSize;\n\n    ps.stdin.write(input);\n    ps.stdin.end();\n  }\n\n  imageSize(callback?: Function) {\n    var img = this.file;\n\n    if (cp.execSync) {\n      callback =\n        callback ||\n        function (err, result) {\n          return result;\n        };\n      try {\n        return callback(null, this.imageSizeSync());\n      } catch (e) {\n        return callback(e);\n      }\n    }\n\n    if (OverlayImage.hasW3MDisplay === false) {\n      if (!callback) return;\n      return callback(new Error('W3M Image Display not available.'));\n    }\n\n    if (!img) {\n      if (!callback) return;\n      return callback(new Error('No image.'));\n    }\n\n    var opt = {\n      stdio: 'pipe',\n      env: process.env,\n      cwd: process.env.HOME,\n    };\n\n    var ps = this.spawn(OverlayImage.w3mdisplay, [], opt);\n\n    var buf = '';\n\n    ps.stdout.setEncoding('utf8');\n\n    ps.stdout.on('data', function (data) {\n      buf += data;\n    });\n\n    ps.on('error', function (err) {\n      if (!callback) return;\n      return callback(err);\n    });\n\n    ps.on('exit', function () {\n      if (!callback) return;\n      var size = buf.trim().split(/\\s+/);\n      return callback(null, {\n        raw: buf.trim(),\n        width: +size[0],\n        height: +size[1],\n      });\n    });\n\n    var input = '5;' + img + '\\n';\n\n    ps.stdin.write(input);\n    ps.stdin.end();\n  }\n\n  termSize(callback?: Function) {\n    if (cp.execSync) {\n      callback =\n        callback ||\n        function (err, result) {\n          return result;\n        };\n      try {\n        return callback(null, this.termSizeSync());\n      } catch (e) {\n        return callback(e);\n      }\n    }\n\n    if (OverlayImage.hasW3MDisplay === false) {\n      if (!callback) return;\n      return callback(new Error('W3M Image Display not available.'));\n    }\n\n    var opt = {\n      stdio: 'pipe',\n      env: process.env,\n      cwd: process.env.HOME,\n    };\n\n    var ps = this.spawn(OverlayImage.w3mdisplay, ['-test'], opt);\n\n    var buf = '';\n\n    ps.stdout.setEncoding('utf8');\n\n    ps.stdout.on('data', function (data) {\n      buf += data;\n    });\n\n    ps.on('error', function (err) {\n      if (!callback) return;\n      return callback(err);\n    });\n\n    ps.on('exit', () => {\n      if (!callback) return;\n\n      if (!buf.trim()) {\n        // Bug: w3mimgdisplay will sometimes\n        // output nothing. Try again:\n        return this.termSize(callback);\n      }\n\n      var size = buf.trim().split(/\\s+/);\n\n      return callback(null, {\n        raw: buf.trim(),\n        width: +size[0],\n        height: +size[1],\n      });\n    });\n\n    ps.stdin.end();\n  }\n\n  getPixelRatio(callback?: Function) {\n    if (cp.execSync) {\n      callback =\n        callback ||\n        function (err, result) {\n          return result;\n        };\n      try {\n        return callback(null, this.getPixelRatioSync());\n      } catch (e) {\n        return callback(e);\n      }\n    }\n\n    // XXX We could cache this, but sometimes it's better\n    // to recalculate to be pixel perfect.\n    if (this._ratio && !this._needsRatio) {\n      return callback(null, this._ratio);\n    }\n\n    return this.termSize((err, dimensions) => {\n      if (err) return callback(err);\n\n      this._ratio = {\n        tw: dimensions.width / this.screen.width,\n        th: dimensions.height / this.screen.height,\n      };\n\n      this._needsRatio = false;\n\n      return callback(null, this._ratio);\n    });\n  }\n\n  renderImageSync(img: string, ratio: PixelRatio): boolean {\n    if (OverlayImage.hasW3MDisplay === false) {\n      throw new Error('W3M Image Display not available.');\n    }\n\n    if (!ratio) {\n      throw new Error('No ratio.');\n    }\n\n    // clearImage unsets these:\n    var _file = this.file;\n    var _lastSize = this._lastSize;\n\n    this.clearImageSync();\n\n    this.file = _file;\n    this._lastSize = _lastSize;\n\n    var width = (this.width * ratio.tw) | 0,\n      height = (this.height * ratio.th) | 0,\n      aleft = (this.aleft * ratio.tw) | 0,\n      atop = (this.atop * ratio.th) | 0;\n\n    var input =\n      '0;1;' +\n      aleft +\n      ';' +\n      atop +\n      ';' +\n      width +\n      ';' +\n      height +\n      ';;;;;' +\n      img +\n      '\\n4;\\n3;\\n';\n\n    this._props = {\n      aleft: aleft,\n      atop: atop,\n      width: width,\n      height: height,\n    };\n\n    try {\n      cp.execFileSync(OverlayImage.w3mdisplay, [], {\n        env: process.env,\n        encoding: 'utf8',\n        input: input,\n        timeout: 1000,\n      });\n    } catch (e) {}\n\n    return true;\n  }\n\n  clearImageSync(): boolean {\n    if (OverlayImage.hasW3MDisplay === false) {\n      throw new Error('W3M Image Display not available.');\n    }\n\n    if (!this._props) {\n      return false;\n    }\n\n    var width = this._props.width + 2,\n      height = this._props.height + 2,\n      aleft = this._props.aleft,\n      atop = this._props.atop;\n\n    if (this._drag) {\n      aleft -= 10;\n      atop -= 10;\n      width += 10;\n      height += 10;\n    }\n\n    var input =\n      '6;' + aleft + ';' + atop + ';' + width + ';' + height + '\\n4;\\n3;\\n';\n\n    delete this.file;\n    delete this._props;\n    delete this._lastSize;\n\n    try {\n      cp.execFileSync(OverlayImage.w3mdisplay, [], {\n        env: process.env,\n        encoding: 'utf8',\n        input: input,\n        timeout: 1000,\n      });\n    } catch (e) {}\n\n    return true;\n  }\n\n  imageSizeSync(): ImageSize {\n    var img = this.file;\n\n    if (OverlayImage.hasW3MDisplay === false) {\n      throw new Error('W3M Image Display not available.');\n    }\n\n    if (!img) {\n      throw new Error('No image.');\n    }\n\n    var buf = '';\n    var input = '5;' + img + '\\n';\n\n    try {\n      buf = cp.execFileSync(OverlayImage.w3mdisplay, [], {\n        env: process.env,\n        encoding: 'utf8',\n        input: input,\n        timeout: 1000,\n      });\n    } catch (e) {}\n\n    var size = buf.trim().split(/\\s+/);\n\n    return {\n      raw: buf.trim(),\n      width: +size[0],\n      height: +size[1],\n    };\n  }\n\n  termSizeSync(_?: any, recurse?: number): ImageSize {\n    if (OverlayImage.hasW3MDisplay === false) {\n      throw new Error('W3M Image Display not available.');\n    }\n\n    var buf = '';\n\n    try {\n      buf = cp.execFileSync(OverlayImage.w3mdisplay, ['-test'], {\n        env: process.env,\n        encoding: 'utf8',\n        timeout: 1000,\n      });\n    } catch (e) {}\n\n    if (!buf.trim()) {\n      // Bug: w3mimgdisplay will sometimes\n      // output nothing. Try again:\n      recurse = recurse || 0;\n      if (++recurse === 5) {\n        throw new Error('Term size not determined.');\n      }\n      return this.termSizeSync(_, recurse);\n    }\n\n    var size = buf.trim().split(/\\s+/);\n\n    return {\n      raw: buf.trim(),\n      width: +size[0],\n      height: +size[1],\n    };\n  }\n\n  getPixelRatioSync(): PixelRatio {\n    // XXX We could cache this, but sometimes it's better\n    // to recalculate to be pixel perfect.\n    if (this._ratio && !this._needsRatio) {\n      return this._ratio;\n    }\n    this._needsRatio = false;\n\n    var dimensions = this.termSizeSync();\n\n    this._ratio = {\n      tw: dimensions.width / this.screen.width,\n      th: dimensions.height / this.screen.height,\n    };\n\n    return this._ratio;\n  }\n\n  displayImage(callback?: Function) {\n    return this.screen.displayImage(this.file, callback);\n  }\n}\n\n/**\n * Factory function for backward compatibility\n */\nfunction overlayImage(options?: OverlayImageOptions): OverlayImageInterface {\n  return new OverlayImage(options) as OverlayImageInterface;\n}\n\n// Attach the class as a property for direct access\noverlayImage.OverlayImage = OverlayImage;\n\n/**\n * Expose\n */\n\nexport default overlayImage;\n","/**\n * video.js - video element for blessed\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\n/**\n * Modules\n */\n\nimport * as cp from 'child_process';\n\nimport Node from './node.js';\nimport boxFactory from './box.js';\nconst Box = boxFactory.Box;\nimport Terminal from './terminal.js';\n\n/**\n * Type definitions\n */\n\nimport { VideoOptions, VideoInterface } from '../types/index';\n\n/**\n * Interfaces\n */\n\ninterface TerminalOptions {\n  parent: any;\n  left: number;\n  top: number;\n  width: number;\n  height: number;\n  shell: string;\n  args: string[];\n  start?: number;\n}\n\ninterface VideoTerminal {\n  pty: {\n    write(data: string): void;\n  };\n  destroy(): void;\n}\n\ninterface VideoScreen {\n  render(): void;\n}\n\n/**\n * Video - Modern ES6 Class\n */\n\nclass Video extends Box {\n  type = 'video';\n  now: number = 0;\n  start: number = 0;\n  tty?: VideoTerminal;\n\n  constructor(options?: VideoOptions) {\n    // Handle malformed options gracefully\n    if (!options || typeof options !== 'object' || Array.isArray(options)) {\n      options = {};\n    }\n\n    super(options);\n\n    this._initializeVideo(options);\n  }\n\n  private _initializeVideo(options: VideoOptions): void {\n    let shell: string;\n    let args: string[];\n\n    if (this.exists('mplayer')) {\n      shell = 'mplayer';\n      args = ['-vo', 'caca', '-quiet', options.file || ''];\n    } else if (this.exists('mpv')) {\n      shell = 'mpv';\n      args = ['--vo', 'caca', '--really-quiet', options.file || ''];\n    } else {\n      this.parseTags = true;\n      this.setContent(\n        '{red-fg}{bold}Error:{/bold}' +\n          ' mplayer or mpv not installed.{/red-fg}'\n      );\n      return;\n    }\n\n    // Calculate dimensions and ensure they're valid\n    let termWidth = this.width - this.iwidth;\n    let termHeight = this.height - this.iheight;\n\n    // Ensure minimum valid dimensions\n    if (isNaN(termWidth) || termWidth <= 0) termWidth = 80;\n    if (isNaN(termHeight) || termHeight <= 0) termHeight = 24;\n\n    const opts: TerminalOptions = {\n      parent: this,\n      left: 0,\n      top: 0,\n      width: termWidth,\n      height: termHeight,\n      shell: shell,\n      args: args.slice(),\n    };\n\n    this.now = (Date.now() / 1000) | 0;\n    this.start = options.start || 0;\n    if (this.start) {\n      if (shell === 'mplayer') {\n        opts.args.unshift('-ss', this.start + '');\n      } else if (shell === 'mpv') {\n        opts.args.unshift('--start', this.start + '');\n      }\n    }\n\n    const DISPLAY = process.env.DISPLAY;\n    delete process.env.DISPLAY;\n    this.tty = new Terminal(opts);\n    process.env.DISPLAY = DISPLAY;\n\n    this._setupEventHandlers(shell, args);\n  }\n\n  private _setupEventHandlers(shell: string, args: string[]): void {\n    this.on('click', () => {\n      if (this.tty && this.tty.pty) {\n        this.tty.pty.write('p');\n      }\n    });\n\n    // mplayer/mpv cannot resize itself in the terminal, so we have\n    // to restart it at the correct start time.\n    this.on('resize', () => {\n      if (this.tty) {\n        this.tty.destroy();\n      }\n\n      // Calculate dimensions and ensure they're valid\n      let termWidth = this.width - this.iwidth;\n      let termHeight = this.height - this.iheight;\n\n      // Ensure minimum valid dimensions\n      if (isNaN(termWidth) || termWidth <= 0) termWidth = 80;\n      if (isNaN(termHeight) || termHeight <= 0) termHeight = 24;\n\n      const opts: TerminalOptions = {\n        parent: this,\n        left: 0,\n        top: 0,\n        width: termWidth,\n        height: termHeight,\n        shell: shell,\n        args: args.slice(),\n      };\n\n      const watched = ((Date.now() / 1000) | 0) - this.now;\n      this.now = (Date.now() / 1000) | 0;\n      this.start += watched;\n      if (shell === 'mplayer') {\n        opts.args.unshift('-ss', this.start + '');\n      } else if (shell === 'mpv') {\n        opts.args.unshift('--start', this.start + '');\n      }\n\n      const DISPLAY = process.env.DISPLAY;\n      delete process.env.DISPLAY;\n      this.tty = new Terminal(opts);\n      process.env.DISPLAY = DISPLAY;\n      (this.screen as VideoScreen).render();\n    });\n  }\n\n  exists(program: string): boolean {\n    try {\n      return !!+cp\n        .execSync(\n          'type ' + program + ' > /dev/null 2> /dev/null' + ' && echo 1',\n          { encoding: 'utf8' }\n        )\n        .trim();\n    } catch (e) {\n      return false;\n    }\n  }\n\n  // Video control methods for interface compatibility\n  play(): void {\n    if (this.tty && this.tty.pty) {\n      this.tty.pty.write('p');\n    }\n  }\n\n  pause(): void {\n    if (this.tty && this.tty.pty) {\n      this.tty.pty.write('p');\n    }\n  }\n\n  stop(): void {\n    if (this.tty) {\n      this.tty.destroy();\n    }\n  }\n}\n\n/**\n * Factory function for backward compatibility\n */\nfunction video(options?: VideoOptions): VideoInterface {\n  return new Video(options) as VideoInterface;\n}\n\n// Attach the class as a property for direct access\nvideo.Video = Video;\n\n/**\n * Expose\n */\n\nexport default video;\n","/**\n * layout.js - layout element for blessed\n * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).\n * https://github.com/chjj/blessed\n */\n\n/**\n * Modules\n */\n\nimport Node from './node.js';\nimport Element from './element.js';\n\n/**\n * Type definitions\n */\n\ninterface LayoutOptions {\n  width?: number;\n  height?: number;\n  left?: number;\n  right?: number;\n  top?: number;\n  bottom?: number;\n  layout?: 'inline' | 'grid';\n  renderer?: (coords: LayoutCoords) => LayoutIterator;\n  [key: string]: any;\n}\n\ninterface LayoutCoords {\n  xi: number;\n  xl: number;\n  yi: number;\n  yl: number;\n}\n\ninterface LayoutPosition {\n  left: number;\n  top: number;\n  width?: number;\n}\n\ninterface LayoutPadding {\n  left: number;\n  right: number;\n  top: number;\n  bottom: number;\n}\n\ninterface LayoutChild {\n  shrink?: boolean;\n  width: number;\n  height: number;\n  position: LayoutPosition;\n  lpos?: LayoutCoords;\n  index?: number;\n  screen: {\n    _ci: number;\n  };\n  render(): void;\n}\n\ninterface LayoutIterator {\n  (el: LayoutChild, i: number): boolean | void;\n}\n\ninterface LayoutInterface extends Element {\n  type: string;\n  options: LayoutOptions;\n  children: LayoutChild[];\n  lpos?: LayoutCoords;\n  border?: boolean;\n  tpadding?: boolean;\n  padding?: LayoutPadding;\n  renderer: (coords: LayoutCoords) => LayoutIterator;\n  isRendered(el: LayoutChild): boolean;\n  getLast(i: number): LayoutChild | undefined;\n  getLastCoords(i: number): LayoutCoords | undefined;\n  _renderCoords(): LayoutCoords | undefined;\n  render(): LayoutCoords | undefined;\n  _emit(event: string, args?: any[]): void;\n  _getCoords(get?: boolean): LayoutCoords | undefined;\n  _render(): any;\n}\n\n/**\n * Layout - Modern ES6 Class\n */\n\nclass Layout extends Element {\n  type = 'layout';\n  options: LayoutOptions;\n  lpos?: LayoutCoords;\n  border?: boolean;\n  tpadding?: boolean;\n  padding?: LayoutPadding;\n\n  constructor(options?: LayoutOptions) {\n    // Handle malformed options gracefully\n    if (!options || typeof options !== 'object' || Array.isArray(options)) {\n      options = {};\n    }\n\n    // Validate required dimensions\n    if (\n      (options.width == null &&\n        options.left == null &&\n        options.right == null) ||\n      (options.height == null && options.top == null && options.bottom == null)\n    ) {\n      throw new Error('`Layout` must have a width and height!');\n    }\n\n    // Set default layout type\n    options.layout = options.layout || 'inline';\n\n    super(options);\n\n    this.options = options;\n\n    // Ensure padding is properly initialized (fallback for inheritance issues)\n    if (!this.padding) {\n      this.padding = {\n        left: 0,\n        top: 0,\n        right: 0,\n        bottom: 0,\n      };\n    }\n\n    // Set custom renderer if provided\n    if (options.renderer) {\n      this.renderer = options.renderer;\n    }\n  }\n\n  isRendered(el: LayoutChild): boolean {\n    if (!el.lpos) return false;\n    return el.lpos.xl - el.lpos.xi > 0 && el.lpos.yl - el.lpos.yi > 0;\n  }\n\n  getLast(i: number): LayoutChild | undefined {\n    while (this.children[--i]) {\n      const el = this.children[i];\n      if (this.isRendered(el)) return el;\n    }\n  }\n\n  getLastCoords(i: number): LayoutCoords | undefined {\n    const last = this.getLast(i);\n    if (last) return last.lpos;\n  }\n\n  _renderCoords(): LayoutCoords | undefined {\n    const coords = this._getCoords(true);\n    const children = this.children;\n    this.children = [];\n    this._render();\n    this.children = children;\n    return coords;\n  }\n\n  renderer(coords: LayoutCoords): LayoutIterator {\n    const self = this;\n\n    // The coordinates of the layout element\n    const width = coords.xl - coords.xi;\n    const height = coords.yl - coords.yi;\n    const xi = coords.xi;\n    const yi = coords.yi;\n\n    // The current row offset in cells (which row are we on?)\n    let rowOffset = 0;\n\n    // The index of the first child in the row\n    let rowIndex = 0;\n    let lastRowIndex = 0;\n\n    // Figure out the highest width child\n    let highWidth = 0;\n    if (this.options.layout === 'grid') {\n      highWidth = this.children.reduce(function (\n        out: number,\n        el: LayoutChild\n      ): number {\n        out = Math.max(out, el.width);\n        return out;\n      }, 0);\n    }\n\n    return function iterator(el: LayoutChild, i: number): boolean | void {\n      // Make our children shrinkable. If they don't have a height, for\n      // example, calculate it for them.\n      el.shrink = true;\n\n      // Find the previous rendered child's coordinates\n      const last = self.getLast(i);\n\n      // If there is no previously rendered element, we are on the first child.\n      if (!last) {\n        el.position.left = 0;\n        el.position.top = 0;\n      } else {\n        // Otherwise, figure out where to place this child. We'll start by\n        // setting it's `left`/`x` coordinate to right after the previous\n        // rendered element. This child will end up directly to the right of it.\n        el.position.left = last.lpos!.xl - xi;\n\n        // Make sure the position matches the highest width element\n        if (self.options.layout === 'grid') {\n          // Compensate with width:\n          // el.position.width = el.width + (highWidth - el.width);\n          // Compensate with position:\n          el.position.left += highWidth - (last.lpos!.xl - last.lpos!.xi);\n        }\n\n        // If our child does not overlap the right side of the Layout, set it's\n        // `top`/`y` to the current `rowOffset` (the coordinate for the current\n        // row).\n        if (el.position.left + el.width <= width) {\n          el.position.top = rowOffset;\n        } else {\n          // Otherwise we need to start a new row and calculate a new\n          // `rowOffset` and `rowIndex` (the index of the child on the current\n          // row).\n          rowOffset += self.children.slice(rowIndex, i).reduce(function (\n            out: number,\n            el: LayoutChild\n          ): number {\n            if (!self.isRendered(el)) return out;\n            out = Math.max(out, el.lpos!.yl - el.lpos!.yi);\n            return out;\n          }, 0);\n          lastRowIndex = rowIndex;\n          rowIndex = i;\n          el.position.left = 0;\n          el.position.top = rowOffset;\n        }\n      }\n\n      // Make sure the elements on lower rows graviatate up as much as possible\n      if (self.options.layout === 'inline') {\n        let above: LayoutChild | null = null;\n        let abovea = Infinity;\n        for (let j = lastRowIndex; j < rowIndex; j++) {\n          const l = self.children[j];\n          if (!self.isRendered(l)) continue;\n          const abs = Math.abs(el.position.left - (l.lpos!.xi - xi));\n          // if (abs < abovea && (l.lpos.xl - l.lpos.xi) <= el.width) {\n          if (abs < abovea) {\n            above = l;\n            abovea = abs;\n          }\n        }\n        if (above) {\n          el.position.top = above.lpos!.yl - yi;\n        }\n      }\n\n      // If our child overflows the Layout, do not render it!\n      // Disable this feature for now.\n      if (el.position.top + el.height > height) {\n        // Returning false tells blessed to ignore this child.\n        // return false;\n      }\n    };\n  }\n\n  render(): LayoutCoords | undefined {\n    this._emit('prerender');\n\n    const coords = this._renderCoords();\n    if (!coords) {\n      delete this.lpos;\n      return;\n    }\n\n    if (coords.xl - coords.xi <= 0) {\n      coords.xl = Math.max(coords.xl, coords.xi);\n      return;\n    }\n\n    if (coords.yl - coords.yi <= 0) {\n      coords.yl = Math.max(coords.yl, coords.yi);\n      return;\n    }\n\n    this.lpos = coords;\n\n    if (this.border) coords.xi++, coords.xl--, coords.yi++, coords.yl--;\n    if (this.tpadding) {\n      (coords.xi += this.padding!.left), (coords.xl -= this.padding!.right);\n      (coords.yi += this.padding!.top), (coords.yl -= this.padding!.bottom);\n    }\n\n    const iterator = this.renderer(coords);\n\n    if (this.border) coords.xi--, coords.xl++, coords.yi--, coords.yl++;\n    if (this.tpadding) {\n      (coords.xi -= this.padding!.left), (coords.xl += this.padding!.right);\n      (coords.yi -= this.padding!.top), (coords.yl += this.padding!.bottom);\n    }\n\n    this.children.forEach(function (el: LayoutChild, i: number) {\n      if (el.screen._ci !== -1) {\n        el.index = el.screen._ci++;\n      }\n      const rendered = iterator(el, i);\n      if (rendered === false) {\n        delete el.lpos;\n        return;\n      }\n      // if (el.screen._rendering) {\n      //   el._rendering = true;\n      // }\n      el.render();\n      // if (el.screen._rendering) {\n      //   el._rendering = false;\n      // }\n    });\n\n    this._emit('render', [coords]);\n\n    return coords;\n  }\n}\n\n/**\n * Factory function for backward compatibility\n */\nfunction layout(options?: LayoutOptions): LayoutInterface {\n  return new Layout(options) as LayoutInterface;\n}\n\n// Attach the class as a property for direct access\nlayout.Layout = Layout;\n\n/**\n * Expose\n */\n\nexport default layout;\n"]}