Full Code of xtermjs/xterm.js for AI

master 1432e2008284 cached
696 files
4.5 MB
1.2M tokens
3490 symbols
1 requests
Download .txt
Showing preview only (4,880K chars total). Download the full file or copy to clipboard to get everything.
Repository: xtermjs/xterm.js
Branch: master
Commit: 1432e2008284
Files: 696
Total size: 4.5 MB

Directory structure:
gitextract_4c2m1yy1/

├── .devcontainer/
│   └── devcontainer.json
├── .editorconfig
├── .gitattributes
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   ├── config.yml
│   │   └── feature_request.md
│   ├── copilot-instructions.md
│   ├── hooks/
│   │   └── setupRepo.json
│   ├── instructions/
│   │   ├── benchmark.instructions.md
│   │   └── unit-test.instructions.md
│   └── workflows/
│       ├── ci.yml
│       ├── codeql-analysis.yml
│       ├── copilot-setup-steps.yml
│       └── release.yml
├── .gitignore
├── .gitmodules
├── .npmignore
├── .nvmrc
├── .vscode/
│   ├── extensions.json
│   ├── launch.json
│   ├── settings.json
│   └── tasks.json
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── addons/
│   ├── addon-attach/
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── AttachAddon.ts
│   │   │   └── tsconfig.json
│   │   ├── test/
│   │   │   ├── AttachAddon.test.ts
│   │   │   ├── playwright.config.ts
│   │   │   └── tsconfig.json
│   │   ├── tsconfig.json
│   │   ├── typings/
│   │   │   └── addon-attach.d.ts
│   │   └── webpack.config.js
│   ├── addon-clipboard/
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── ClipboardAddon.ts
│   │   │   └── tsconfig.json
│   │   ├── test/
│   │   │   ├── ClipboardAddon.test.ts
│   │   │   ├── playwright.config.ts
│   │   │   └── tsconfig.json
│   │   ├── tsconfig.json
│   │   ├── typings/
│   │   │   └── addon-clipboard.d.ts
│   │   └── webpack.config.js
│   ├── addon-fit/
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── FitAddon.ts
│   │   │   └── tsconfig.json
│   │   ├── test/
│   │   │   ├── FitAddon.test.ts
│   │   │   ├── playwright.config.ts
│   │   │   └── tsconfig.json
│   │   ├── tsconfig.json
│   │   ├── typings/
│   │   │   └── addon-fit.d.ts
│   │   └── webpack.config.js
│   ├── addon-image/
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── fixture/
│   │   │   ├── endless.sh
│   │   │   ├── gcrglf.sh
│   │   │   ├── growing_rect.js
│   │   │   ├── iip/
│   │   │   │   ├── palette.iip
│   │   │   │   ├── spinfox.iip
│   │   │   │   ├── w3c_gif.iip
│   │   │   │   ├── w3c_jpg.iip
│   │   │   │   └── w3c_png.iip
│   │   │   ├── inspect_palette.sh
│   │   │   ├── overdraw.sh
│   │   │   ├── palette.blob
│   │   │   ├── palette.sixel
│   │   │   └── textcursor.sh
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── IIPHandler.ts
│   │   │   ├── IIPHeaderParser.test.ts
│   │   │   ├── IIPHeaderParser.ts
│   │   │   ├── IIPImageStorage.ts
│   │   │   ├── IIPMetrics.test.ts
│   │   │   ├── IIPMetrics.ts
│   │   │   ├── ImageAddon.ts
│   │   │   ├── ImageRenderer.ts
│   │   │   ├── ImageStorage.ts
│   │   │   ├── SixelHandler.ts
│   │   │   ├── SixelImageStorage.ts
│   │   │   ├── Types.ts
│   │   │   ├── kitty/
│   │   │   │   ├── KittyGraphicsHandler.ts
│   │   │   │   ├── KittyGraphicsTypes.test.ts
│   │   │   │   ├── KittyGraphicsTypes.ts
│   │   │   │   └── KittyImageStorage.ts
│   │   │   └── tsconfig.json
│   │   ├── test/
│   │   │   ├── ImageAddon.test.ts
│   │   │   ├── KittyGraphics.test.ts
│   │   │   ├── playwright.config.ts
│   │   │   └── tsconfig.json
│   │   ├── tsconfig.json
│   │   ├── typings/
│   │   │   └── addon-image.d.ts
│   │   └── webpack.config.js
│   ├── addon-ligatures/
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── fonts/
│   │   │   └── FiraCode-Regular.otf
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── LigaturesAddon.ts
│   │   │   ├── Types.ts
│   │   │   ├── font.ts
│   │   │   ├── fontLigatures/
│   │   │   │   ├── flatten.ts
│   │   │   │   ├── index.test.ts
│   │   │   │   ├── index.ts
│   │   │   │   ├── merge.test.ts
│   │   │   │   ├── merge.ts
│   │   │   │   ├── mergeRange.test.ts
│   │   │   │   ├── mergeRange.ts
│   │   │   │   ├── processors/
│   │   │   │   │   ├── 6-1.ts
│   │   │   │   │   ├── 6-2.ts
│   │   │   │   │   ├── 6-3.ts
│   │   │   │   │   ├── 8-1.ts
│   │   │   │   │   ├── classDef.ts
│   │   │   │   │   ├── coverage.ts
│   │   │   │   │   ├── helper.ts
│   │   │   │   │   └── substitution.ts
│   │   │   │   ├── tables.ts
│   │   │   │   ├── types.ts
│   │   │   │   └── walk.ts
│   │   │   ├── index.ts
│   │   │   ├── parse.test.ts
│   │   │   ├── parse.ts
│   │   │   └── tsconfig.json
│   │   ├── test/
│   │   │   ├── LigaturesAddon.test.ts
│   │   │   └── tsconfig.json
│   │   ├── tsconfig.json
│   │   ├── typings/
│   │   │   └── addon-ligatures.d.ts
│   │   └── webpack.config.js
│   ├── addon-progress/
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── ProgressAddon.ts
│   │   │   └── tsconfig.json
│   │   ├── test/
│   │   │   ├── ProgressAddon.test.ts
│   │   │   ├── playwright.config.ts
│   │   │   └── tsconfig.json
│   │   ├── tsconfig.json
│   │   ├── typings/
│   │   │   └── addon-progress.d.ts
│   │   └── webpack.config.js
│   ├── addon-search/
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── fixtures/
│   │   │   └── issue-2444
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── DecorationManager.ts
│   │   │   ├── SearchAddon.ts
│   │   │   ├── SearchEngine.test.ts
│   │   │   ├── SearchEngine.ts
│   │   │   ├── SearchLineCache.test.ts
│   │   │   ├── SearchLineCache.ts
│   │   │   ├── SearchResultTracker.ts
│   │   │   ├── SearchState.ts
│   │   │   └── tsconfig.json
│   │   ├── test/
│   │   │   ├── SearchAddon.test.ts
│   │   │   ├── playwright.config.ts
│   │   │   └── tsconfig.json
│   │   ├── tsconfig.json
│   │   ├── typings/
│   │   │   └── addon-search.d.ts
│   │   └── webpack.config.js
│   ├── addon-serialize/
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── README.md
│   │   ├── benchmark/
│   │   │   ├── SerializeAddon.benchmark.ts
│   │   │   ├── benchmark.json
│   │   │   └── tsconfig.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── SerializeAddon.test.ts
│   │   │   ├── SerializeAddon.ts
│   │   │   └── tsconfig.json
│   │   ├── test/
│   │   │   ├── SerializeAddon.test.ts
│   │   │   ├── playwright.config.ts
│   │   │   └── tsconfig.json
│   │   ├── tsconfig.json
│   │   ├── typings/
│   │   │   └── addon-serialize.d.ts
│   │   └── webpack.config.js
│   ├── addon-unicode-graphemes/
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── benchmark/
│   │   │   ├── UnicodeGraphemeAddon.benchmark.ts
│   │   │   ├── benchmark.json
│   │   │   └── tsconfig.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── UnicodeGraphemeProvider.ts
│   │   │   ├── UnicodeGraphemesAddon.ts
│   │   │   ├── third-party/
│   │   │   │   ├── UnicodeProperties.ts
│   │   │   │   ├── tiny-inflate.ts
│   │   │   │   └── unicode-trie.ts
│   │   │   └── tsconfig.json
│   │   ├── test/
│   │   │   ├── UnicodeGraphemesAddon.test.ts
│   │   │   ├── playwright.config.ts
│   │   │   └── tsconfig.json
│   │   ├── tsconfig.json
│   │   ├── typings/
│   │   │   └── addon-unicode-graphemes.d.ts
│   │   └── webpack.config.js
│   ├── addon-unicode11/
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── Unicode11Addon.ts
│   │   │   ├── UnicodeV11.ts
│   │   │   └── tsconfig.json
│   │   ├── test/
│   │   │   ├── Unicode11Addon.test.ts
│   │   │   ├── playwright.config.ts
│   │   │   └── tsconfig.json
│   │   ├── tsconfig.json
│   │   ├── typings/
│   │   │   └── addon-unicode11.d.ts
│   │   └── webpack.config.js
│   ├── addon-web-fonts/
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── WebFontsAddon.ts
│   │   │   └── tsconfig.json
│   │   ├── test/
│   │   │   ├── WebFontsAddon.test.ts
│   │   │   ├── playwright.config.ts
│   │   │   └── tsconfig.json
│   │   ├── tsconfig.json
│   │   ├── typings/
│   │   │   └── addon-web-fonts.d.ts
│   │   └── webpack.config.js
│   ├── addon-web-links/
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── WebLinkProvider.ts
│   │   │   ├── WebLinksAddon.ts
│   │   │   └── tsconfig.json
│   │   ├── test/
│   │   │   ├── WebLinksAddon.test.ts
│   │   │   ├── playwright.config.ts
│   │   │   └── tsconfig.json
│   │   ├── tsconfig.json
│   │   ├── typings/
│   │   │   └── addon-web-links.d.ts
│   │   └── webpack.config.js
│   └── addon-webgl/
│       ├── .gitignore
│       ├── .npmignore
│       ├── LICENSE
│       ├── README.md
│       ├── package.json
│       ├── src/
│       │   ├── CellColorResolver.ts
│       │   ├── CharAtlasCache.ts
│       │   ├── CharAtlasUtils.ts
│       │   ├── Constants.ts
│       │   ├── CursorBlinkStateManager.ts
│       │   ├── DevicePixelObserver.ts
│       │   ├── GlyphRenderer.ts
│       │   ├── RectangleRenderer.ts
│       │   ├── RenderModel.ts
│       │   ├── TextureAtlas.ts
│       │   ├── TypedArray.test.ts
│       │   ├── TypedArray.ts
│       │   ├── Types.ts
│       │   ├── WebglAddon.ts
│       │   ├── WebglRenderer.ts
│       │   ├── WebglUtils.ts
│       │   ├── customGlyphs/
│       │   │   ├── CustomGlyphDefinitions.ts
│       │   │   ├── CustomGlyphRasterizer.ts
│       │   │   └── Types.ts
│       │   ├── renderLayer/
│       │   │   ├── BaseRenderLayer.ts
│       │   │   ├── LinkRenderLayer.ts
│       │   │   └── Types.ts
│       │   └── tsconfig.json
│       ├── test/
│       │   ├── WebglRenderer.test.ts
│       │   ├── playwright.config.ts
│       │   └── tsconfig.json
│       ├── tsconfig.json
│       ├── typings/
│       │   └── addon-webgl.d.ts
│       └── webpack.config.js
├── bin/
│   ├── agent/
│   │   └── setup-repo.mjs
│   ├── convert_svg_to_custom_glyph.js
│   ├── esbuild.mjs
│   ├── esbuild_all.mjs
│   ├── extract_vtfeatures.js
│   ├── lint_changes.js
│   ├── package_headless.js
│   ├── publish.js
│   ├── test_integration.js
│   ├── test_mousemodes.js
│   ├── test_unit.js
│   ├── update-website.sh
│   ├── vs_base_find_unused.js
│   └── vs_base_update.ps1
├── css/
│   └── xterm.css
├── demo/
│   ├── client/
│   │   ├── client.ts
│   │   ├── components/
│   │   │   ├── controlBar.ts
│   │   │   └── window/
│   │   │       ├── addonImageWindow.ts
│   │   │       ├── addonLigaturesWindow.ts
│   │   │       ├── addonProgressWindow.ts
│   │   │       ├── addonSearchWindow.ts
│   │   │       ├── addonSerializeWindow.ts
│   │   │       ├── addonWebFontsWindow.ts
│   │   │       ├── addonWebLinksWindow.ts
│   │   │       ├── addonsWindow.ts
│   │   │       ├── baseWindow.ts
│   │   │       ├── cellInspectorWindow.ts
│   │   │       ├── gpuWindow.ts
│   │   │       ├── optionsWindow.ts
│   │   │       ├── styleWindow.ts
│   │   │       ├── testWindow.ts
│   │   │       ├── vtWindow.ts
│   │   │       └── webglWindow.ts
│   │   ├── tsconfig.json
│   │   ├── types.ts
│   │   └── unicodeTable.ts
│   ├── fonts/
│   │   ├── bpdots.regular.otf
│   │   └── font-licenses.txt
│   ├── index.css
│   ├── index.html
│   ├── server/
│   │   ├── server.ts
│   │   └── tsconfig.json
│   ├── start.js
│   ├── test.html
│   └── tsconfig.json
├── eslint.config.mjs
├── eslint.config.typings.mjs
├── fixtures/
│   └── escape_sequence_files/
│       ├── NOTES
│       ├── run_tests.py
│       ├── t0001-all_printable.in
│       ├── t0001-all_printable.text
│       ├── t0002-history.in
│       ├── t0002-history.text
│       ├── t0002j-simple_string.in
│       ├── t0002j-simple_string.text
│       ├── t0003-line_wrap.in
│       ├── t0003-line_wrap.text
│       ├── t0003j-LF.in
│       ├── t0003j-LF.text
│       ├── t0004-LF.in
│       ├── t0004-LF.text
│       ├── t0004j-CR.in
│       ├── t0004j-CR.text
│       ├── t0005-CR.in
│       ├── t0005-CR.text
│       ├── t0006-IND.in
│       ├── t0006-IND.text
│       ├── t0007-space_at_end.in
│       ├── t0007-space_at_end.text
│       ├── t0008-BS.in
│       ├── t0008-BS.text
│       ├── t0009-NEL.in
│       ├── t0009-NEL.text
│       ├── t0010-RI.in
│       ├── t0010-RI.text
│       ├── t0011-RI_scroll.in
│       ├── t0011-RI_scroll.text
│       ├── t0012-VT.in
│       ├── t0012-VT.text
│       ├── t0013-FF.in
│       ├── t0013-FF.text
│       ├── t0014-CAN.in
│       ├── t0014-CAN.text
│       ├── t0015-SUB.in
│       ├── t0015-SUB.text
│       ├── t0016-SU.in
│       ├── t0016-SU.text
│       ├── t0017-SD.in
│       ├── t0017-SD.text
│       ├── t0020-CUF.in
│       ├── t0020-CUF.text
│       ├── t0021-CUB.in
│       ├── t0021-CUB.text
│       ├── t0022-CUU.in
│       ├── t0022-CUU.text
│       ├── t0023-CUU_scroll.in
│       ├── t0023-CUU_scroll.text
│       ├── t0024-CUD.in
│       ├── t0024-CUD.text
│       ├── t0025-CUP.in
│       ├── t0025-CUP.text
│       ├── t0026-CNL.in
│       ├── t0026-CNL.text
│       ├── t0027-CPL.in
│       ├── t0027-CPL.text
│       ├── t0030-HPR.in
│       ├── t0030-HPR.text
│       ├── t0031-HPB.in_
│       ├── t0031-HPB.text
│       ├── t0032-VPB.in
│       ├── t0032-VPB.text
│       ├── t0033-VPB_scroll.in
│       ├── t0033-VPB_scroll.text
│       ├── t0034-VPR.in
│       ├── t0034-VPR.text
│       ├── t0035-HVP.in
│       ├── t0035-HVP.text
│       ├── t0040-REP.in
│       ├── t0040-REP.text
│       ├── t0050-ICH.in
│       ├── t0050-ICH.text
│       ├── t0051-IL.in
│       ├── t0051-IL.text
│       ├── t0052-DL.in
│       ├── t0052-DL.text
│       ├── t0053-DCH.in
│       ├── t0053-DCH.text
│       ├── t0054-ECH.in
│       ├── t0054-ECH.text
│       ├── t0055-EL.in
│       ├── t0055-EL.text
│       ├── t0056-ED.in
│       ├── t0056-ED.text
│       ├── t0057-ED3.in
│       ├── t0057-ED3.note
│       ├── t0057-ED3.text
│       ├── t0060-DECSC.in
│       ├── t0060-DECSC.text
│       ├── t0061-CSI_s.in
│       ├── t0061-CSI_s.text
│       ├── t0070-DECSTBM_LF.in
│       ├── t0070-DECSTBM_LF.text
│       ├── t0071-DECSTBM_IND.in
│       ├── t0071-DECSTBM_IND.text
│       ├── t0072-DECSTBM_NEL.in
│       ├── t0072-DECSTBM_NEL.text
│       ├── t0073-DECSTBM_RI.in
│       ├── t0073-DECSTBM_RI.text
│       ├── t0074-DECSTBM_SU_SD.in
│       ├── t0074-DECSTBM_SU_SD.text
│       ├── t0075-DECSTBM_CUU_CUD.in
│       ├── t0075-DECSTBM_CUU_CUD.text
│       ├── t0076-DECSTBM_IL_DL.in
│       ├── t0076-DECSTBM_IL_DL.text
│       ├── t0077-DECSTBM_quirks.in
│       ├── t0077-DECSTBM_quirks.text
│       ├── t0078-DECSTBM_CPL_CNL.in
│       ├── t0078-DECSTBM_CPL_CNL.text
│       ├── t0079-DECSTBM_VPR.in
│       ├── t0079-DECSTBM_VPR.text
│       ├── t0080-HT.in
│       ├── t0080-HT.text
│       ├── t0081-TBC.in
│       ├── t0081-TBC.text
│       ├── t0082-HTS.in
│       ├── t0082-HTS.text
│       ├── t0083-CHT.in
│       ├── t0083-CHT.text
│       ├── t0084-CBT.in
│       ├── t0084-CBT.text
│       ├── t0084-CBT.text-xterm
│       ├── t0090-alt_screen.in
│       ├── t0090-alt_screen.text
│       ├── t0091-alt_screen_ED3.in
│       ├── t0091-alt_screen_ED3.text
│       ├── t0092-alt_screen_DECSC.in
│       ├── t0092-alt_screen_DECSC.text
│       ├── t0100-IRM.in
│       ├── t0100-IRM.text
│       ├── t0101-NLM.in
│       ├── t0101-NLM.text
│       ├── t0102-DECAWM.in
│       ├── t0102-DECAWM.text
│       ├── t0103-reverse_wrap.in
│       ├── t0103-reverse_wrap.text
│       ├── t0200-SGR.html
│       ├── t0200-SGR.in_
│       ├── t0220-SGR_inverse.html
│       ├── t0220-SGR_inverse.in_
│       ├── t0300-vttest1.in
│       ├── t0300-vttest1.text
│       ├── t0500-bash_long_line.in
│       ├── t0500-bash_long_line.text
│       ├── t0501-bash_ls.in
│       ├── t0501-bash_ls.text
│       ├── t0502-bash_ls_color.in
│       ├── t0502-bash_ls_color.text
│       ├── t0503-zsh_ls_color.in
│       ├── t0503-zsh_ls_color.text
│       ├── t0504-vim.in
│       ├── t0504-vim.text
│       ├── t600-DECSTBM_SR.in
│       ├── t600-DECSTBM_SR.text
│       ├── t601-DECSTBM_SL.in
│       ├── t601-DECSTBM_SL.text
│       ├── t602-DECSTBM_DECIC.in
│       ├── t602-DECSTBM_DECIC.text
│       ├── t603-DECSTBM_DECDC.in
│       └── t603-DECSTBM_DECDC.text
├── headless/
│   ├── .gitignore
│   ├── .npmignore
│   ├── README.md
│   └── package.json
├── images/
│   └── build-flow.tldr
├── package.json
├── src/
│   ├── browser/
│   │   ├── AccessibilityManager.ts
│   │   ├── Clipboard.test.ts
│   │   ├── Clipboard.ts
│   │   ├── ColorContrastCache.test.ts
│   │   ├── ColorContrastCache.ts
│   │   ├── CoreBrowserTerminal.ts
│   │   ├── Dom.ts
│   │   ├── Linkifier.test.ts
│   │   ├── Linkifier.ts
│   │   ├── LocalizableStrings.ts
│   │   ├── OscLinkProvider.ts
│   │   ├── RenderDebouncer.ts
│   │   ├── Terminal.test.ts
│   │   ├── Terminal2.test.ts
│   │   ├── TestUtils.test.ts
│   │   ├── TimeBasedDebouncer.ts
│   │   ├── Types.ts
│   │   ├── Viewport.ts
│   │   ├── decorations/
│   │   │   ├── BufferDecorationRenderer.ts
│   │   │   ├── ColorZoneStore.test.ts
│   │   │   ├── ColorZoneStore.ts
│   │   │   └── OverviewRulerRenderer.ts
│   │   ├── input/
│   │   │   ├── CompositionHelper.test.ts
│   │   │   ├── CompositionHelper.ts
│   │   │   ├── Mouse.test.ts
│   │   │   ├── Mouse.ts
│   │   │   ├── MoveToCell.test.ts
│   │   │   └── MoveToCell.ts
│   │   ├── public/
│   │   │   └── Terminal.ts
│   │   ├── renderer/
│   │   │   ├── dom/
│   │   │   │   ├── DomRenderer.ts
│   │   │   │   ├── DomRendererRowFactory.test.ts
│   │   │   │   ├── DomRendererRowFactory.ts
│   │   │   │   ├── WidthCache.test.ts
│   │   │   │   └── WidthCache.ts
│   │   │   └── shared/
│   │   │       ├── Constants.ts
│   │   │       ├── README.md
│   │   │       ├── RendererUtils.test.ts
│   │   │       ├── RendererUtils.ts
│   │   │       ├── SelectionRenderModel.ts
│   │   │       ├── TextBlinkStateManager.test.ts
│   │   │       ├── TextBlinkStateManager.ts
│   │   │       └── Types.ts
│   │   ├── scrollable/
│   │   │   ├── abstractScrollbar.ts
│   │   │   ├── fastDomNode.ts
│   │   │   ├── globalPointerMoveMonitor.ts
│   │   │   ├── horizontalScrollbar.ts
│   │   │   ├── mouseEvent.ts
│   │   │   ├── scrollable.ts
│   │   │   ├── scrollableElement.ts
│   │   │   ├── scrollableElementOptions.ts
│   │   │   ├── scrollbarArrow.ts
│   │   │   ├── scrollbarState.ts
│   │   │   ├── scrollbarVisibilityController.ts
│   │   │   ├── touch.ts
│   │   │   ├── verticalScrollbar.ts
│   │   │   └── widget.ts
│   │   ├── selection/
│   │   │   ├── SelectionModel.test.ts
│   │   │   ├── SelectionModel.ts
│   │   │   └── Types.ts
│   │   ├── services/
│   │   │   ├── CharSizeService.ts
│   │   │   ├── CharacterJoinerService.test.ts
│   │   │   ├── CharacterJoinerService.ts
│   │   │   ├── CoreBrowserService.ts
│   │   │   ├── KeyboardService.ts
│   │   │   ├── LinkProviderService.ts
│   │   │   ├── MouseCoordsService.ts
│   │   │   ├── MouseService.test.ts
│   │   │   ├── MouseService.ts
│   │   │   ├── RenderService.ts
│   │   │   ├── SelectionService.test.ts
│   │   │   ├── SelectionService.ts
│   │   │   ├── Services.ts
│   │   │   ├── ThemeService.test.ts
│   │   │   └── ThemeService.ts
│   │   ├── shared/
│   │   │   └── Constants.ts
│   │   └── tsconfig.json
│   ├── common/
│   │   ├── Async.ts
│   │   ├── CircularList.test.ts
│   │   ├── CircularList.ts
│   │   ├── Clone.test.ts
│   │   ├── Clone.ts
│   │   ├── Color.test.ts
│   │   ├── Color.ts
│   │   ├── CoreTerminal.ts
│   │   ├── Event.test.ts
│   │   ├── Event.ts
│   │   ├── InputHandler.test.ts
│   │   ├── InputHandler.ts
│   │   ├── Lifecycle.ts
│   │   ├── MultiKeyMap.test.ts
│   │   ├── MultiKeyMap.ts
│   │   ├── Platform.ts
│   │   ├── SortedList.test.ts
│   │   ├── SortedList.ts
│   │   ├── TaskQueue.ts
│   │   ├── TestUtils.test.ts
│   │   ├── Types.ts
│   │   ├── Version.ts
│   │   ├── WindowsMode.ts
│   │   ├── buffer/
│   │   │   ├── AttributeData.ts
│   │   │   ├── Buffer.test.ts
│   │   │   ├── Buffer.ts
│   │   │   ├── BufferLine.test.ts
│   │   │   ├── BufferLine.ts
│   │   │   ├── BufferRange.test.ts
│   │   │   ├── BufferRange.ts
│   │   │   ├── BufferReflow.test.ts
│   │   │   ├── BufferReflow.ts
│   │   │   ├── BufferSet.test.ts
│   │   │   ├── BufferSet.ts
│   │   │   ├── CellData.test.ts
│   │   │   ├── CellData.ts
│   │   │   ├── Constants.ts
│   │   │   ├── Marker.ts
│   │   │   └── Types.ts
│   │   ├── data/
│   │   │   ├── Charsets.ts
│   │   │   └── EscapeSequences.ts
│   │   ├── input/
│   │   │   ├── Keyboard.test.ts
│   │   │   ├── Keyboard.ts
│   │   │   ├── KittyKeyboard.test.ts
│   │   │   ├── KittyKeyboard.ts
│   │   │   ├── TextDecoder.test.ts
│   │   │   ├── TextDecoder.ts
│   │   │   ├── UnicodeV6.test.ts
│   │   │   ├── UnicodeV6.ts
│   │   │   ├── Win32InputMode.test.ts
│   │   │   ├── Win32InputMode.ts
│   │   │   ├── WriteBuffer.test.ts
│   │   │   ├── WriteBuffer.ts
│   │   │   ├── XParseColor.test.ts
│   │   │   └── XParseColor.ts
│   │   ├── parser/
│   │   │   ├── ApcParser.test.ts
│   │   │   ├── ApcParser.ts
│   │   │   ├── Constants.ts
│   │   │   ├── DcsParser.test.ts
│   │   │   ├── DcsParser.ts
│   │   │   ├── EscapeSequenceParser.test.ts
│   │   │   ├── EscapeSequenceParser.ts
│   │   │   ├── OscParser.test.ts
│   │   │   ├── OscParser.ts
│   │   │   ├── Params.test.ts
│   │   │   ├── Params.ts
│   │   │   └── Types.ts
│   │   ├── public/
│   │   │   ├── AddonManager.test.ts
│   │   │   ├── AddonManager.ts
│   │   │   ├── BufferApiView.ts
│   │   │   ├── BufferLineApiView.ts
│   │   │   ├── BufferNamespaceApi.ts
│   │   │   ├── ParserApi.ts
│   │   │   └── UnicodeApi.ts
│   │   ├── services/
│   │   │   ├── BufferService.ts
│   │   │   ├── CharsetService.ts
│   │   │   ├── CoreService.test.ts
│   │   │   ├── CoreService.ts
│   │   │   ├── DecorationService.test.ts
│   │   │   ├── DecorationService.ts
│   │   │   ├── InstantiationService.ts
│   │   │   ├── LogService.ts
│   │   │   ├── MouseStateService.test.ts
│   │   │   ├── MouseStateService.ts
│   │   │   ├── OptionsService.test.ts
│   │   │   ├── OptionsService.ts
│   │   │   ├── OscLinkService.test.ts
│   │   │   ├── OscLinkService.ts
│   │   │   ├── ServiceRegistry.ts
│   │   │   ├── Services.ts
│   │   │   ├── UnicodeService.test.ts
│   │   │   └── UnicodeService.ts
│   │   └── tsconfig.json
│   ├── headless/
│   │   ├── Terminal.ts
│   │   ├── public/
│   │   │   ├── Terminal.test.ts
│   │   │   └── Terminal.ts
│   │   └── tsconfig.json
│   ├── tsconfig-base.json
│   └── tsconfig-library-base.json
├── test/
│   ├── benchmark/
│   │   ├── EscapeSequenceParser.benchmark.ts
│   │   ├── Event.benchmark.ts
│   │   ├── Terminal.benchmark.ts
│   │   ├── benchmark.json
│   │   └── tsconfig.json
│   └── playwright/
│       ├── CharWidth.test.ts
│       ├── InputHandler.test.ts
│       ├── MouseTracking.test.ts
│       ├── Parser.test.ts
│       ├── Renderer.test.ts
│       ├── SharedRendererTests.ts
│       ├── Terminal.test.ts
│       ├── TestUtils.ts
│       ├── playwright.config.ts
│       └── tsconfig.json
├── tsconfig.all.json
├── typings/
│   ├── xterm-headless.d.ts
│   └── xterm.d.ts
├── webpack.config.headless.js
└── webpack.config.js

================================================
FILE CONTENTS
================================================

================================================
FILE: .devcontainer/devcontainer.json
================================================
{
  "name": "xterm.js",
  "image": "mcr.microsoft.com/devcontainers/typescript-node:22-bookworm",
  "features": {
    "ghcr.io/devcontainers/features/node:1": {
      "version": 22
    } // yarn
  },
  "forwardPorts": [
    3000
  ],
  "postCreateCommand": "npm install && npm run setup",
  "customizations": {
    "vscode": {
      "extensions": [
        "dbaeumer.vscode-eslint",
        "editorconfig.editorconfig",
        "hbenl.vscode-mocha-test-adapter"
      ]
    }
  }
}


================================================
FILE: .editorconfig
================================================
root = true

[*]
indent_style = space
indent_size = 2
insert_final_newline = true
trim_trailing_whitespace = true

[*.{j,t}s]
max_line_length = 100

[*.css]
indent_size = 4

[*.md]
trim_trailing_whitespace = false


================================================
FILE: .gitattributes
================================================
* text=auto


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a bug report
---

<!-- ⚠️ Please search existing issues to avoid creating duplicates. ⚠️ -->
<!-- Describe the bug here. -->

## Details
- Browser and browser version: 
- OS version: 
- xterm.js version: 

### Steps to reproduce

1. 
2. 


================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
  - name: FAQ
    url:  https://github.com/xtermjs/xterm.js/wiki/FAQ
    about: See our frequently asked questions before filing a bug report
  - name: Support / Q&A
    url:  https://github.com/xtermjs/xterm.js/discussions/categories/q-a
    about: Use GitHub Discussions for community support and general Q&A


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest a feature or enhancement
---

<!-- ⚠️ Please search existing issues to avoid creating duplicates. ⚠️ -->
<!-- Describe the enhancement here. -->


================================================
FILE: .github/copilot-instructions.md
================================================
# xterm.js Copilot Instructions

## Architecture Overview

**Core Structure**: xterm.js is a multi-target terminal emulator with three main distributions:
- `src/browser/`: Full-featured browser terminal with DOM rendering
- `src/headless/`: Server-side terminal for Node.js (no DOM)
- `src/common/`: Shared core logic (parsing, buffer management, terminal state)

**Key Classes**:
- `Terminal` (browser/headless): Public API wrapper
- `CoreTerminal` (common): Core terminal logic and state
- `CoreBrowserTerminal` (browser): Browser-specific terminal implementation

## Development Workflow

**Build System**:
```bash
npm run build && npm run esbuild # Build all TypeScript and bundle
```

**Testing**:
- Unit tests: `npm run test-unit` (Mocha)
- Unit tests filtering to file: `npm run test-unit -- **/fileName.ts
- Per-addon unit tests: `npm run test-unit -- addons/addon-image/out-esbuild/*.test.js`
- Integration tests: `npm run test-integration` (Playwright across Chrome/Firefox/WebKit)
- Integration tests by file: `npm run test-integration -- test/playwright/InputHandler.test.ts`. Never use grep to filter tests, it doesn't work
- Integration tests by addon: `npm run test-integration -- --suite=addon-search`. Suites always follow the format `addon-<something>`
- Lint changes: `npm run lint-changes` to lint only changed files, `npm run lint-changes-fix` to fix them

## Addon Development Pattern

All addons follow this structure:
```typescript
export class MyAddon implements ITerminalAddon {
  activate(terminal: Terminal): void {
    // Called when loaded via terminal.loadAddon()
    // Register handlers, access terminal APIs
  }
  dispose(): void {
    // Cleanup when addon is disposed
  }
}
```

**Key Examples**:
- `addons/addon-fit/`: Terminal sizing
- `addons/addon-webgl/`: GPU-accelerated rendering
- `addons/addon-search/`: Text search functionality

## Project-Specific Conventions

**TypeScript Project Structure**: Uses TypeScript project references (`tsconfig.all.json`) for incremental builds across browser/headless/addons.

**API Design**: 
- Browser and headless terminals share the same public API
- Proposed APIs require `allowProposedApi: true` option
- Constructor-only options (cols, rows) cannot be changed after instantiation

**Testing Utilities**: Use `TestUtils.ts` helpers:
- `openTerminal(ctx, options)` for setup
- `pollFor(page, fn, expectedValue)` for async assertions
- `writeSync(page, data)` for terminal input

## Common Patterns

**Parser Integration**: Register custom escape sequence handlers:
```typescript
terminal.parser.registerCsiHandler('m', params => {
  // Handle SGR sequences
  return true; // Handled
});
```

**Buffer Access**: Read terminal content via buffer API:
```typescript
const line = terminal.buffer.active.getLine(0);
const cell = line?.getCell(0);
```

**Events**: All terminals emit standard events (onData, onResize, onRender) plus platform-specific ones.

## Critical Implementation Details

- Terminal rendering uses either DOM or WebGL renderers
- Buffer lines are immutable; create new instances for modifications
- Character width handling supports Unicode 11+ and grapheme clustering
- Mouse events translate web events to terminal protocols (X10, VT200, etc.)
- Color theming supports both palette and true color modes

## Writing unit tests

- Unit tests live alongside the source code file of the thing it's testing with a .test.ts suffix.


================================================
FILE: .github/hooks/setupRepo.json
================================================
{
	"hooks": {
		"SessionStart": [
			{
				"type": "command",
				"command": "npm run agent:setup-repo"
			}
		]
	}
}

================================================
FILE: .github/instructions/benchmark.instructions.md
================================================
---
applyTo: '**/*.benchmark.ts'
---
# Benchmark run instructions

- Full suite: `npm run benchmark`
- Single benchmark file:
  - Tree: `npm run benchmark -- -t out-test/benchmark/Event.benchmark.js`
  - Run file: `npm run benchmark -- -s "out-test/benchmark/Event.benchmark.js" out-test/benchmark/Event.benchmark.js`
- Single context/case:
  - Use `-t` to get the path, then:
  - `npm run benchmark -- -s "<path>" out-test/benchmark/Event.benchmark.js`

When writing instructions, use `RuntimeCase` to measure pure runtime in ms, use `ThroughputRuntimeCase` when measuring throughput in MB/s.

Notes:
- Benchmarks run from built JS in `out-test/benchmark/*.benchmark.js`.
- Keep `NODE_PATH=./out` (handled by the npm script).


================================================
FILE: .github/instructions/unit-test.instructions.md
================================================
---
applyTo: '**/*.test.ts'
---
When writing unit tests follow these rules:

- When writing unit tests for addons, always create a real xterm.js instance instead of mocking it.
- Prefer `assert.ok` over `assert.notStrictEqual` when checking something is undefined or not.
- Avoid comments as most tests should be self-documenting.


================================================
FILE: .github/workflows/ci.yml
================================================
name: CI

on:
  push:
    branches: [ "master" ]
  pull_request:
    branches: [ "master" ]

jobs:
  build:
    runs-on: ubuntu-latest
    timeout-minutes: 10
    steps:
    - uses: actions/checkout@v3
    - name: Use Node.js 22.x
      uses: actions/setup-node@v3
      with:
        node-version: 22.x
        cache: 'npm'
    - name: Install dependencies
      run: npm ci
    - name: Setup and run tsc
      run: npm run setup
    - name: Esbuild
      run: npm run esbuild
    - name: Zip artifacts
      run: |
        zip -r compressed-build \
          ./lib/* \
          ./out/* \
          ./out-*/* \
          ./addons/addon-attach/lib/* \
          ./addons/addon-attach/out/* \
          ./addons/addon-attach/out-*/* \
          ./addons/addon-clipboard/lib/* \
          ./addons/addon-clipboard/out/* \
          ./addons/addon-clipboard/out-*/* \
          ./addons/addon-fit/lib/* \
          ./addons/addon-fit/out/* \
          ./addons/addon-fit/out-*/* \
          ./addons/addon-image/lib/* \
          ./addons/addon-image/out/* \
          ./addons/addon-image/out-*/* \
          ./addons/addon-ligatures/lib/* \
          ./addons/addon-ligatures/out/* \
          ./addons/addon-ligatures/out-*/* \
          ./addons/addon-progress/lib/* \
          ./addons/addon-progress/out/* \
          ./addons/addon-progress/out-*/* \
          ./addons/addon-search/lib/* \
          ./addons/addon-search/out/* \
          ./addons/addon-search/out-*/* \
          ./addons/addon-serialize/lib/* \
          ./addons/addon-serialize/out/* \
          ./addons/addon-serialize/out-*/* \
          ./addons/addon-unicode11/lib/* \
          ./addons/addon-unicode11/out/* \
          ./addons/addon-unicode11/out-*/* \
          ./addons/addon-unicode-graphemes/lib/* \
          ./addons/addon-unicode-graphemes/out/* \
          ./addons/addon-unicode-graphemes/out-*/* \
          ./addons/addon-web-links/lib/* \
          ./addons/addon-web-links/out/* \
          ./addons/addon-web-links/out-*/* \
          ./addons/addon-web-fonts/lib/* \
          ./addons/addon-web-fonts/out/* \
          ./addons/addon-web-fonts/out-*/* \
          ./addons/addon-webgl/lib/* \
          ./addons/addon-webgl/out/* \
          ./addons/addon-webgl/out-*st/*
    - name: Upload artifacts
      uses: actions/upload-artifact@v4
      with:
        name: build-artifacts
        path: compressed-build.zip
        if-no-files-found: error

  lint:
    runs-on: ubuntu-latest
    timeout-minutes: 10
    steps:
    - uses: actions/checkout@v3
    - name: Use Node.js 22.x
      uses: actions/setup-node@v3
      with:
        node-version: 22.x
        cache: 'npm'
    - name: Install dependencies
      run: |
        npm ci
    - name: Lint code
      env:
        NODE_OPTIONS: --max_old_space_size=4096
      run: npm run lint
    - name: Lint API
      run: npm run lint-api

  test-unit-coverage:
    needs: build
    runs-on: ubuntu-latest
    timeout-minutes: 10
    steps:
    - uses: actions/checkout@v3
    - name: Use Node.js 22.x
      uses: actions/setup-node@v3
      with:
        node-version: 22.x
        cache: 'npm'
    - name: Install dependencies
      run: |
        npm ci
    - uses: actions/download-artifact@v4
      with:
        name: build-artifacts
    - name: Unzip artifacts
      shell: bash
      run: |
        if [ "$RUNNER_OS" == "Windows" ]; then
          pwsh -Command "7z x compressed-build.zip -aoa -o${{ github.workspace }}"
        else
          unzip -o compressed-build.zip
        fi
        ls -R
    - name: Unit test coverage
      run: |
        npm run test-unit-coverage --forbid-only
        EXIT_CODE=$?
        ./node_modules/.bin/nyc report --reporter=cobertura
        exit $EXIT_CODE

  test-unit:
    timeout-minutes: 20
    strategy:
      matrix:
        node-version: [22]
        runs-on: [ubuntu, macos, windows]
    runs-on: ${{ matrix.runs-on }}-latest
    steps:
    - uses: actions/checkout@v3
    - name: Use Node.js ${{ matrix.node-version }}.x
      uses: actions/setup-node@v3
      with:
        node-version: ${{ matrix.node-version }}.x
        cache: 'npm'
    - name: Install dependencies
      run: |
        npm ci
    - name: Wait for build job
      uses: NathanFirmo/wait-for-other-job@v1.1.1
      with:
        token: ${{ secrets.GITHUB_TOKEN }}
        job: build
    - uses: actions/download-artifact@v4
      with:
        name: build-artifacts
    - name: Unzip artifacts
      shell: bash
      run: |
        if [ "$RUNNER_OS" == "Windows" ]; then
          pwsh -Command "7z x compressed-build.zip -aoa -o${{ github.workspace }}"
        else
          unzip -o compressed-build.zip
        fi
        ls -R
    - name: Unit tests
      run: npm run test-unit --forbid-only

  test-integration:
    timeout-minutes: 20
    strategy:
      matrix:
        node-version: [22] # just one as integration tests are about testing in browser
        runs-on: [ubuntu-22.04] # macos is flaky
        browser: [chromium, firefox, webkit]
    runs-on: ${{ matrix.runs-on }}
    steps:
    - uses: actions/checkout@v3
    - name: Use Node.js ${{ matrix.node-version }}.x
      uses: actions/setup-node@v3
      with:
        node-version: ${{ matrix.node-version }}.x
        cache: 'npm'
    - name: Install dependencies
      run: |
        npm ci
    - name: Install playwright
      run: npx playwright install --with-deps ${{ matrix.browser }}
    - name: Wait for build job
      uses: NathanFirmo/wait-for-other-job@v1.1.1
      with:
        token: ${{ secrets.GITHUB_TOKEN }}
        job: build
    - uses: actions/download-artifact@v4
      with:
        name: build-artifacts
    - name: Unzip artifacts
      shell: bash
      run: |
        if [ "$RUNNER_OS" == "Windows" ]; then
          pwsh -Command "7z x compressed-build.zip -aoa -o${{ github.workspace }}"
        else
          unzip -o compressed-build.zip
        fi
        ls -R
    - name: Build demo client
      run: npm run esbuild-demo-client
    - name: Build demo server
      run: npm run esbuild-demo-server
    - name: Integration tests (core) # Tests use 50% workers to reduce flakiness
      run: npm run test-integration-${{ matrix.browser }} --workers=50% --forbid-only --suite=core
    - name: Integration tests (addon-attach)
      run: npm run test-integration-${{ matrix.browser }} --workers=50% --forbid-only --suite=addon-attach
    - name: Integration tests (addon-clipboard)
      run: npm run test-integration-${{ matrix.browser }} --workers=50% --forbid-only --suite=addon-clipboard
    - name: Integration tests (addon-fit)
      run: npm run test-integration-${{ matrix.browser }} --workers=50% --forbid-only --suite=addon-fit
    - name: Integration tests (addon-image)
      run: npm run test-integration-${{ matrix.browser }} --workers=50% --forbid-only --suite=addon-image
    - name: Integration tests (addon-progress)
      run: npm run test-integration-${{ matrix.browser }} --workers=50% --forbid-only --suite=addon-progress
    - name: Integration tests (addon-search)
      run: npm run test-integration-${{ matrix.browser }} --workers=50% --forbid-only --suite=addon-search
    - name: Integration tests (addon-serialize)
      run: npm run test-integration-${{ matrix.browser }} --workers=50% --forbid-only --suite=addon-serialize
    - name: Integration tests (addon-unicode-graphemes)
      run: npm run test-integration-${{ matrix.browser }} --workers=50% --forbid-only --suite=addon-unicode-graphemes
    - name: Integration tests (addon-unicode11)
      run: npm run test-integration-${{ matrix.browser }} --workers=50% --forbid-only --suite=addon-unicode11
    - name: Integration tests (addon-web-fonts)
      run: npm run test-integration-${{ matrix.browser }} --workers=50% --forbid-only --suite=addon-web-fonts
    - name: Integration tests (addon-web-links)
      run: npm run test-integration-${{ matrix.browser }} --workers=50% --forbid-only --suite=addon-web-links
    - name: Integration tests (addon-webgl)
      run: npm run test-integration-${{ matrix.browser }} --workers=50% --forbid-only --suite=addon-webgl

  release-dry-run:
    needs: build
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [22]
    steps:
    - uses: actions/checkout@v3
    - name: Use Node.js ${{ matrix.node-version }}.x
      uses: actions/setup-node@v3
      with:
        node-version: ${{ matrix.node-version }}.x
        cache: 'npm'
    - name: Install dependencies
      run: |
        npm ci
    - name: Install playwright
      run: npx playwright install
    - uses: actions/download-artifact@v4
      with:
        name: build-artifacts
    - name: Unzip artifacts
      shell: bash
      run: |
        if [ "$RUNNER_OS" == "Windows" ]; then
          pwsh -Command "7z x compressed-build.zip -aoa -o${{ github.workspace }}"
        else
          unzip -o compressed-build.zip
        fi
        ls -R
    - name: Package headless
      run: |
        npm run package-headless
        node ./bin/package_headless.js
    - name: Publish to npm (dry run)
      run: node ./bin/publish.js --dry


================================================
FILE: .github/workflows/codeql-analysis.yml
================================================
name: "CodeQL"

on:
  push:
    branches: [ "master" ]
  pull_request:
    branches: [ "master" ]
  schedule:
    - cron: '41 17 * * 0'

jobs:
  analyze:
    name: Analyze
    runs-on: ubuntu-latest
    permissions:
      actions: read
      contents: read
      security-events: write

    strategy:
      fail-fast: false
      matrix:
        language: [ 'javascript' ]

    steps:
    - name: Checkout repository
      uses: actions/checkout@v3
    - name: Initialize CodeQL
      uses: github/codeql-action/init@v2
      with:
        languages: ${{ matrix.language }}
    - name: Autobuild
      uses: github/codeql-action/autobuild@v2
    - name: Perform CodeQL Analysis
      uses: github/codeql-action/analyze@v2


================================================
FILE: .github/workflows/copilot-setup-steps.yml
================================================
name: "Copilot Setup Steps"

on:
  workflow_dispatch:
  push:
    paths:
      - .github/workflows/copilot-setup-steps.yml
  pull_request:
    paths:
      - .github/workflows/copilot-setup-steps.yml

jobs:
  copilot-setup-steps:
    runs-on: ubuntu-latest

    permissions:
      contents: read

    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      - name: Use Node.js 22.x
        uses: actions/setup-node@v3
        with:
          node-version: 22.x
          cache: 'npm'
      - name: Install dependencies
        run: npm ci
      - name: Setup and run tsc
        run: npm run setup
      - name: Esbuild
        run: npm run esbuild


================================================
FILE: .github/workflows/release.yml
================================================
name: Release

on:
  push:
    # If a commit reaches master, assume it has passed CI via PR and publish
    # without running tests to save time to publish
    branches: [ "master" ]

jobs:
  release:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - name: Use Node.js 22.x
      uses: actions/setup-node@v3
      with:
        node-version: 22.x
        cache: 'npm'
    - name: Install dependencies
      run: npm ci
    - name: Build
      run: npm run setup
    - name: Package headless
      run: |
        npm run package-headless
        node ./bin/package_headless.js
    - name: Publish to npm
      env:
        NPM_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
      run: node ./bin/publish.js


================================================
FILE: .gitignore
================================================
node_modules/
*.swp
.lock-wscript
lib/
out/
out-demo/
out-test/
out-esbuild/
out-esbuild-test/
.nyc_output/
Makefile.gyp
*.Makefile
*.target.gyp.mk
*.node
example/*.log
docs/
npm-debug.log
/.idea/
.env
build/
.DS_Store
yarn.lock
test-results/

# Keep bundled code out of Git
dist/
demo/dist/

# dont commit benchmark folders
.benchmark/
timeline/


================================================
FILE: .gitmodules
================================================


================================================
FILE: .npmignore
================================================
# Blacklist - exclude everything except npm defaults such as LICENSE, etc
*
!*/

# Whitelist - css/
!css/**/*.css

# Whitelist - dist/
!dist/**/*.js
!dist/**/*.js.map

!dist/**/*.css

# Whitelist - lib/
!lib/**/*.d.ts

!lib/**/*.js
!lib/**/*.js.map

!lib/**/*.mjs
!lib/**/*.mjs.map

!lib/**/*.css

# Whitelist - src/
!src/**/*.ts
!src/**/*.d.ts

!src/**/*.js
!src/**/*.js.map

!src/**/*.css

# Blacklist - src/ test files
src/**/*.test.ts
src/**/*.test.d.ts
src/**/*.test.js
src/**/*.test.js.map

# Whitelist - typings/
!typings/*.d.ts

# Blacklist - (normal behavior) these will override any whitelist
headless/
typings/xterm-headless.d.ts


================================================
FILE: .nvmrc
================================================
22


================================================
FILE: .vscode/extensions.json
================================================
{
    "recommendations": [
        "dbaeumer.vscode-eslint"
    ]
}

================================================
FILE: .vscode/launch.json
================================================
{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Unit Tests",
      "cwd": "${workspaceRoot}",
      "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/mocha",
      "windows": {
        "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/mocha.cmd"
      },
      "runtimeArgs": [
        "--colors",
        "--recursive",
        "${workspaceRoot}/out/**/*.test.js"
      ],
      "env": {
        "NODE_PATH": "${workspaceRoot}/out"
      },
      "sourceMaps": true,
      "outFiles": [ "${workspaceRoot}/out/**/*.js" ],
      "internalConsoleOptions": "openOnSessionStart"
    },
    {
      "type": "node",
      "request": "launch",
      "name": "Integration Tests",
      "cwd": "${workspaceRoot}",
      "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/mocha",
      "windows": {
        "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/mocha.cmd"
      },
      "runtimeArgs": [
        "--colors",
        "--recursive",
        "${workspaceRoot}/out/**/*.api.js"
      ],
      "sourceMaps": true,
      "outFiles": [ "${workspaceRoot}/lib/**/*.js" ],
      "internalConsoleOptions": "openOnSessionStart"
    },
    {
      "type": "chrome",
      "request": "launch",
      "name": "Demo Client (Chrome)",
      "url": "http://127.0.0.1:3000",
      "webRoot": "${workspaceFolder}/"
    },
    {
      "type": "msedge",
      "request": "launch",
      "name": "Demo Client (Edge)",
      "url": "http://127.0.0.1:3000",
      "webRoot": "${workspaceFolder}/"
    },
    {
      "type": "node",
      "request": "launch",
      "name": "Demo Server",
      "runtimeExecutable": "npm",
      "runtimeArgs": ["start"],
      "stopOnEntry": true,
      "runtimeVersion": "22",
      "serverReadyAction": {
        "action": "openExternally",
        "pattern": "App listening to (http://.*?:[0-9]+)"
      }
    }
  ]
}


================================================
FILE: .vscode/settings.json
================================================
{
  "typescript.preferences.importModuleSpecifier": "non-relative",
  "typescript.preferences.quoteStyle": "single"
}


================================================
FILE: .vscode/tasks.json
================================================
{
  "version": "2.0.0",
  "presentation": {
    "echo": false,
    "reveal": "always",
    "focus": false,
    "panel": "dedicated",
    "showReuseMessage": true
  },
  "tasks": [
    // Compound tasks
    {
      "label": "dev",
      "detail": "Runs all tasks required to run the demo in a single terminal using concurrently. This does not support problem matching.",
      "type": "npm",
      "script": "dev",
      "isBackground": true,
      "group": {
        "kind": "build",
        "isDefault": true
      }
    },
    {
      "label": "dev (separate terminals)",
      "detail": "Runs all tasks required to run the demo in separate terminals. This does support problem matching.",
      "dependsOn": ["demo-server", "tsc", "esbuild", "esbuild-demo-client", "esbuild-demo-server"],
      "group": "build"
    },

    // Demo
    {
      "label": "demo-server",
      "type": "npm",
      "script": "start",
      "group": "build",
      "isBackground": true,
      "problemMatcher": [],
      "presentation": {
        "group": "xterm-demo"
      }
    },

    // Build
    {
      "label": "tsc",
      "type": "npm",
      "script": "tsc-watch",
      "group": "build",
      "isBackground": true,
      "problemMatcher": "$tsc-watch",
      "presentation": {
        "group": "xterm-build"
      }
    },
    {
      "label": "esbuild",
      "type": "npm",
      "script": "esbuild-watch",
      "group": "build",
      "isBackground": true,
      "problemMatcher": "$esbuild-watch",
      "presentation": {
        "group": "xterm-build"
      }
    },
    {
      "label": "esbuild-demo-client",
      "type": "npm",
      "script": "esbuild-demo-client-watch",
      "dependsOn": ["esbuild", "tsc"],
      "group": "build",
      "isBackground": true,
      "problemMatcher": "$esbuild-watch",
      "presentation": {
        "group": "xterm-demo"
      }
    },
    {
      "label": "esbuild-demo-server",
      "type": "npm",
      "script": "esbuild-demo-server-watch",
      "dependsOn": ["esbuild", "tsc"],
      "group": "build",
      "isBackground": true,
      "problemMatcher": "$esbuild-watch",
      "presentation": {
        "group": "xterm-demo"
      }
    },

    // Test
    {
      "type": "npm",
      "script": "test",
      "group":{
        "kind": "test",
        "isDefault": true
      },
      "problemMatcher": []
    }
  ]
}


================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct

## Our Pledge

In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, gender identity and expression, level of experience,
education, socio-economic status, nationality, personal appearance, race,
religion, or sexual identity and orientation.

## Our Standards

Examples of behavior that contributes to creating a positive environment
include:

* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members

Examples of unacceptable behavior by participants include:

* The use of sexualized language or imagery and unwelcome sexual attention or
  advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
  address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
  professional setting

## Our Responsibilities

Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.

Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.

## Scope

This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting [@Tyriar](https://twitter.com/Tyriar) or [@pariskasid](https://twitter.com/pariskasid) on Twitter. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.

Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html

[homepage]: https://www.contributor-covenant.org


================================================
FILE: CONTRIBUTING.md
================================================
# How to contribute to xterm.js

- [Contributing code](#contributing-code)
- [Opening issues](#opening-issues)
- [Answering discussion questions](#answering-discussion-questions)

## Contributing code

You can find issues to work on by looking at issues labeled with [help wanted](https://github.com/xtermjs/xterm.js/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) or [good first issue](https://github.com/xtermjs/xterm.js/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22). It's a good idea to comment on the issue saying that you're looking into it, just in case someone else comes along and you duplicate work. Once you have your issue, here are the steps to contribute:

- Fork [xterm.js](https://github.com/xtermjs/xterm.js/) ([how to fork a repo](https://help.github.com/articles/fork-a-repo)).
- Get the [xterm.js demo](https://github.com/xtermjs/xterm.js/wiki/Contributing#running-the-demo) running.
- Make the fix and verify it works in the demo. Be sure to follow thew general code style of the rest of the project.
- If your changes are easy to test or likely to regress in the future, add tests. These could be unit or integration (playwright) tests.
- Submit a pull request ([how to create a pull request](https://help.github.com/articles/fork-a-repo)).

> ![TIP]
> Don't put more than one feature or fix in a single pull request. The smaller pull requests are the easier they are to review and merge.

By contributing code to xterm.js you:

 - Agree to license the contributed code under xterm.js' [MIT license](LICENSE).
 - Confirm that you have the right to contribute and license the code in question. This means that either you hold all rights on the code, or the rights holder has explicitly granted the right to use it like this, through a compatible open source license or through a direct agreement with you.

## Opening issues

The preferred way to report bugs or request features is to use
[GitHub issues](http://github.com/xtermjs/xterm.js/issues).

### Creating great issues

- Include information about **the browser in which the problem occurred** or the terminal being used. If you tested several browsers and the problem occurred in all of them, mention this fact in the bug report. Also include browser version numbers and the operating system that you're on.
- Include the version of xterm.js being used, preferably either with the latest `beta` tagged release on npm or reproducing in the demo on the `master` branch.
- Mention precisely what went wrong. What did you expect to happen? What happened instead? Describe the exact steps a maintainer has to take to make the problem occur.
- If the problem can not be reproduced in the [demo of xterm.js](https://github.com/xtermjs/xterm.js/wiki/Contributing#running-the-demo), provide an HTML document that demonstrates the problem.
- Be polite and follow [the code of conduct](https://github.com/xtermjs/xterm.js?tab=coc-ov-file#readme).

### Issue triaging philosophy

It's pretty common for maintainers of large open source projects to suffer from burnout, especially when needing to triage a large number of incoming issues instead of actually building things. Here are some of the steps we take to try mitigate this:

- Support questions live in [GH discussions](https://github.com/xtermjs/xterm.js/discussions), issues may be transfered there without further comment and core maintainers may or may not participate in discussions.
- Issues are strictly for well defined features or bugs that are _actionable_.
- Sometimes features are out of scope. A common example of this is a niche feature that the pricipal implementation ([VS Code](https://code.visualstudio.com/)) won't leverage and therefore would be difficult to maintain and likely suffer from bitrot. The reporter may not agree with this, but you could always create an addon if that works or maintain your own fork if it comes to that.
- If a feature does not have a clear way forward or needs more discussion it may be closed ro moved to a discussion.
- If a bug is not easily reproducible it may be closed or moved to a discussion. Generally issues that are labeled are something we want to do or has actionable steps to look into further.

## Answering discussion questions

Issues are only meant to track (likely) feature requests and bugs. We use [GitHub Discussions](https://github.com/xtermjs/xterm.js/discussions) for general Q&A as well as discussing possible features. If you want to help out, many questions get asked over at the [discussions page](https://github.com/xtermjs/xterm.js/discussions) which could use an expert as the core team is often stretched thin.

================================================
FILE: LICENSE
================================================
Copyright (c) 2017-2019, The xterm.js authors (https://github.com/xtermjs/xterm.js)
Copyright (c) 2014-2016, SourceLair Private Company (https://www.sourcelair.com)
Copyright (c) 2012-2013, Christopher Jeffrey (https://github.com/chjj/)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.


================================================
FILE: README.md
================================================
# [![xterm.js](images/logo-full.png)](https://xtermjs.org)

Xterm.js is a frontend component that enables applications to bring fully-featured terminals to their users in the browser. It's used by popular projects such as [VS Code](https://code.visualstudio.com/) (and its forks), [Tabby](https://tabby.sh/) and [Hyper](https://hyper.is/).

## Features

- **Terminal apps just work**: Xterm.js works with most terminal apps such as `bash`, `vim`, and `tmux`, including support for curses-based apps and mouse events.
- **Performant**: Xterm.js is *really* fast and includes an optional GPU-accelerated renderer.
- **Rich Unicode support**: Supports CJK, emojis, and IMEs.
- **Self-contained**: The core library has zero dependencies.
- **Accessible**: Screen reader mode and minimum contrast ratio support can be turned on.
- **And much more**: Links, theming, custom glyphs, addons, well documented API, etc.

## What xterm.js is not

- Xterm.js is not a terminal application that you can download and use on your computer.
- Xterm.js is not `bash`. Xterm.js can be connected to processes like `bash` and let you interact with them (provide input, receive output) through a library like [node-pty](https://github.com/microsoft/node-pty).

## Getting Started

First, you need to install the module. We ship exclusively through [npm](https://www.npmjs.com), so you need that installed and then add [@xterm/xterm](https://www.npmjs.com/package/@xterm/xterm) as a dependency by running:

```bash
npm install --save @xterm/xterm
```

The recommended way to load xterm.js with the ES module syntax, either using TypeScript or a modern JS tooling. Note that both CommonJS and ES module files are shipped with the npm package.

```javascript
import { Terminal } from '@xterm/xterm';
```

Then instantiate a `Terminal` object, open it on an element and write to it:

```javascript
const term = new Terminal();
term.open(document.getElementById('terminal'));
term.write('Hello from \x1B[1;3;31mxterm.js\x1B[0m $ ')
```

Most use cases will hook up input and output to a pseudoterminal API such as [node-pty](https://www.npmjs.com/package/node-pty) which will drive the terminal.

```javascript
pty.onData(data => term.write(data));
term.onData(data => pty.write(data));
```

Then make sure to also include the `css/xterm.css` file, for example in HTML:

```html
<link rel="stylesheet" href="node_modules/@xterm/xterm/css/xterm.css" />
```

### Standalone example

Here is a complete standalone example in a HTML file:

```html
<!doctype html>
  <html>
    <head>
      <link rel="stylesheet" href="node_modules/@xterm/xterm/css/xterm.css" />
      <script src="node_modules/@xterm/xterm/lib/xterm.js"></script>
    </head>
    <body>
      <div id="terminal"></div>
      <script>
        const term = new Terminal();
        term.open(document.getElementById('terminal'));
        term.write('Hello from \x1B[1;3;31mxterm.js\x1B[0m $ ')
      </script>
    </body>
  </html>
```

### Addons

Addons are separate modules that extend the `Terminal` by building on the [xterm.js API](https://github.com/xtermjs/xterm.js/blob/master/typings/xterm.d.ts). To use an addon, you first need to install it in your project:

```bash
npm install --save @xterm/addon-web-links
```

Then import the addon, instantiate it and call `Terminal.loadAddon`:

```ts
import { Terminal } from '@xterm/xterm';
import { WebLinksAddon } from '@xterm/addon-web-links';

const terminal = new Terminal();
// Load WebLinksAddon on terminal, this is all that's needed to get web links
// working in the terminal.
terminal.loadAddon(new WebLinksAddon());
```

The xterm.js team maintains the following addons, but anyone can build them:

- [`@xterm/addon-attach`](https://github.com/xtermjs/xterm.js/tree/master/addons/addon-attach): Attaches to a server running a process via a websocket
- [`@xterm/addon-clipboard`](https://github.com/xtermjs/xterm.js/tree/master/addons/addon-clipboard): Access the browser's clipboard
- [`@xterm/addon-fit`](https://github.com/xtermjs/xterm.js/tree/master/addons/addon-fit): Fits the terminal to the containing element
- [`@xterm/addon-image`](https://github.com/xtermjs/xterm.js/tree/master/addons/addon-image): Adds image support
- [`@xterm/addon-ligatures`](https://github.com/xtermjs/xterm.js/tree/master/addons/addon-ligatures): Enables rendering of ligatures
- [`@xterm/addon-progress`](https://github.com/xtermjs/xterm.js/tree/master/addons/addon-progress): Adds support for the progress API (`OSC 9;4`)
- [`@xterm/addon-search`](https://github.com/xtermjs/xterm.js/tree/master/addons/addon-search): Adds search functionality
- [`@xterm/addon-serialize`](https://github.com/xtermjs/xterm.js/tree/master/addons/addon-serialize): Serializes the terminal's buffer to VT sequences or HTML
- [`@xterm/addon-unicode-graphemes`](https://github.com/xtermjs/xterm.js/tree/master/addons/addon-unicode-graphemes): Enhanced unicode support including grapheme clustering (experimental)
- [`@xterm/addon-unicode11`](https://github.com/xtermjs/xterm.js/tree/master/addons/addon-unicode11): Updates character widths to their unicode11 values
- [`@xterm/addon-web-fonts`](https://github.com/xtermjs/xterm.js/tree/master/addons/addon-web-fonts): Easily integrate web fonts
- [`@xterm/addon-web-links`](https://github.com/xtermjs/xterm.js/tree/master/addons/addon-web-links): Adds web link detection and interaction
- [`@xterm/addon-webgl`](https://github.com/xtermjs/xterm.js/tree/master/addons/addon-webgl): Renders xterm.js using a `canvas` element's webgl2 context

## Browser Support

Since xterm.js is typically implemented as a developer tool, generally only modern evergreen browsers are supported officially. Specifically the latest versions of *Chrome*, *Edge*, *Firefox*, and *Safari*. Xterm.js also works seamlessly in [Electron](https://electronjs.org/) apps and may even work on earlier versions of the browsers. These are the versions we strive to keep working.

### Node.js Support

We also publish [`@xterm/headless`](https://www.npmjs.com/package/@xterm/headless) which is a stripped down version of xterm.js that runs headless in Node.js. An example use case for this is to keep track of a terminal's state where the process is running and using the [serialize addon](https://www.npmjs.com/package/@xterm/addon-serialize) so it can get all state restored upon reconnection.

## API

The full API for xterm.js is contained within the [TypeScript declaration file](https://github.com/xtermjs/xterm.js/blob/master/typings/xterm.d.ts), use the branch/tag picker in GitHub (`w`) to navigate to the correct version of the API.

Some APIs may be marked with *experimental*, these are added to enable experimentation with new ideas without committing to support it like a normal [semver](https://semver.org/) API. Note that these APIs can change radically between versions, so be sure to read release notes if you plan on using experimental APIs.

## Releases

Stable releases are done on an as needed basis. All current and past releases are available on this repo's [releases page](https://github.com/sourcelair/xterm.js/releases), you can see what's planned for upcoming releases looking through the repository [milestones](https://github.com/sourcelair/xterm.js/milestones).

### Beta builds

Beta releases are continuously published off the `master` branch. Install the latest beta build with:

```bash
npm install --save @xterm/xterm@beta
```

The principal implementation (VS Code) typically uses the latest or near the latest beta build. Generally they are quite stable but can potentially contain bugs or breaking changes. If stability is very important we recommend using the beta build primarily to test out new features and to verify bug fixes, unless you're tracking what's landing and are comfortable taking that risk.

## Contributing

Read [CONTRIBUTING.md](https://github.com/xtermjs/xterm.js/blob/master/CONTRIBUTING.md) to learn how to contribute to the project.

## Real-world uses

Xterm.js is used in many world-class applications to provide great terminal experiences.

- [**SourceLair**](https://www.sourcelair.com/): In-browser IDE that provides its users with fully-featured Linux terminals based on xterm.js.
- [**Microsoft Visual Studio Code**](http://code.visualstudio.com/): Modern, versatile, and powerful open source code editor that provides an integrated terminal based on xterm.js.
- [**ttyd**](https://github.com/tsl0922/ttyd): A command-line tool for sharing terminal over the web, with fully-featured terminal emulation based on xterm.js.
- [**Eclipse Che**](http://www.eclipse.org/che): Developer workspace server, cloud IDE, and Eclipse next-generation IDE.
- [**Codenvy**](http://www.codenvy.com): Cloud workspaces for development teams.
- [**CoderPad**](https://coderpad.io): Online interviewing platform for programmers. Run code in many programming languages, with results displayed by xterm.js.
- [**WebSSH2**](https://github.com/billchurch/WebSSH2): A web based SSH2 client using xterm.js, socket.io, and ssh2.
- [**Spyder Terminal**](https://github.com/spyder-ide/spyder-terminal): A full fledged system terminal embedded on Spyder IDE.
- [**Cloud Commander**](https://cloudcmd.io "Cloud Commander"): Orthodox web file manager with console and editor.
- [**Next Tech**](https://next.tech "Next Tech"): Online platform for interactive coding and web development courses. Live container-backed terminal uses xterm.js.
- [**RStudio**](https://www.rstudio.com/products/RStudio "RStudio"): RStudio is an integrated development environment (IDE) for R.
- [**Terminal for Atom**](https://github.com/jsmecham/atom-terminal-tab): A simple terminal for the Atom text editor.
- [**Eclipse Orion**](https://orionhub.org): A modern, open source software development environment that runs in the cloud. Code, deploy, and run in the cloud.
- [**Gravitational Teleport**](https://github.com/gravitational/teleport): Gravitational Teleport is a modern SSH server for remotely accessing clusters of Linux servers via SSH or HTTPS.
- [**Hexlet**](https://en.hexlet.io): Practical programming courses (JavaScript, PHP, Unix, databases, functional programming). A steady path from the first line of code to the first job.
- [**Selenoid UI**](https://github.com/aerokube/selenoid-ui): Simple UI for the scalable golang implementation of Selenium Hub named Selenoid. We use XTerm for streaming logs over websockets from docker containers.
- [**Portainer**](https://portainer.io): Simple management UI for Docker.
- [**SSHy**](https://github.com/stuicey/SSHy): HTML5 Based SSHv2 Web Client with E2E encryption utilising xterm.js, SJCL & websockets.
- [**JupyterLab**](https://github.com/jupyterlab/jupyterlab): An extensible computational environment for Jupyter, supporting interactive data science and scientific computing across all programming languages.
- [**Theia**](https://github.com/theia-ide/theia): Theia is a cloud & desktop IDE framework implemented in TypeScript.
- [**Opshell**](https://github.com/ricktbaker/opshell) Ops Helper tool to make life easier working with AWS instances across multiple organizations.
- [**Proxmox VE**](https://www.proxmox.com/en/proxmox-ve): Proxmox VE is a complete open-source platform for enterprise virtualization. It uses xterm.js for container terminals and the host shell.
- [**Script Runner**](https://github.com/ioquatix/script-runner): Run scripts (or a shell) in Atom.
- [**Whack Whack Terminal**](https://github.com/Microsoft/WhackWhackTerminal): Terminal emulator for Visual Studio 2017.
- [**VTerm**](https://github.com/vterm/vterm): Extensible terminal emulator based on Electron and React.
- [**electerm**](http://electerm.html5beta.com): electerm is a terminal/ssh/sftp client(mac, win, linux) based on electron/node-pty/xterm.
- [**Kubebox**](https://github.com/astefanutti/kubebox): Terminal console for Kubernetes clusters.
- [**Azure Cloud Shell**](https://shell.azure.com): Azure Cloud Shell is a Microsoft-managed admin machine built on Azure, for Azure.
- [**atom-xterm**](https://atom.io/packages/atom-xterm): Atom plugin for providing terminals inside your Atom workspace.
- [**rtty**](https://github.com/zhaojh329/rtty): Access your terminals from anywhere via the web.
- [**Pisth**](https://github.com/ColdGrub1384/Pisth): An SFTP and SSH client for iOS.
- [**abstruse**](https://github.com/bleenco/abstruse): Abstruse CI is a continuous integration platform based on Node.JS and Docker.
- [**Azure Data Studio**](https://github.com/Microsoft/azuredatastudio): A data management tool that enables working with SQL Server, Azure SQL DB and SQL DW from Windows, macOS and Linux.
- [**FreeMAN**](https://github.com/matthew-matvei/freeman): A free, cross-platform file manager for power users.
- [**Fluent Terminal**](https://github.com/felixse/FluentTerminal): A terminal emulator based on UWP and web technologies.
- [**Hyper**](https://hyper.is): A terminal built on web technologies.
- [**Diag**](https://diag.ai): A better way to troubleshoot problems faster. Capture, share and reapply troubleshooting knowledge so you can focus on solving problems that matter.
- [**GoTTY**](https://github.com/sorenisanerd/gotty): A simple command line tool that shares your terminal as a web application based on xterm.js.
- [**genact**](https://github.com/svenstaro/genact): A nonsense activity generator.
- [**cPanel & WHM**](https://cpanel.com): The hosting platform of choice.
- [**Nutanix**](https://github.com/nutanix): Nutanix Enterprise Cloud uses xterm in the webssh functionality within Nutanix Calm, and is also looking to move our old noserial (termjs) functionality to xterm.js.
- [**SSH Web Client**](https://github.com/roke22/PHP-SSH2-Web-Client): SSH Web Client with PHP.
- [**Juno**](http://junolab.org/): A flexible Julia IDE, based on Atom.
- [**webssh**](https://github.com/huashengdun/webssh): Web based ssh client.
- [**info-beamer hosted**](https://info-beamer.com): Uses xterm.js to manage digital signage devices from the web dashboard.
- [**Jumpserver**](https://github.com/jumpserver/luna): Jumpserver Luna project, Jumpserver is a bastion server project, Luna use xterm.js for web terminal emulation.
- [**LxdMosaic**](https://github.com/turtle0x1/LxdMosaic): Uses xterm.js to give terminal access to containers through LXD
- [**CodeInterview.io**](https://codeinterview.io): A coding interview platform in 25+ languages and many web frameworks. Uses xterm.js to provide shell access.
- [**Bastillion**](https://www.bastillion.io): Bastillion is an open-source web-based SSH console that centrally manages administrative access to systems.
- [**PHP App Server**](https://github.com/cubiclesoft/php-app-server/): Create lightweight, installable almost-native applications for desktop OSes.  ExecTerminal (nicely wraps the xterm.js Terminal), TerminalManager, and RunProcessSDK are self-contained, reusable ES5+ compliant Javascript components.
- [**NgTerminal**](https://github.com/qwefgh90/ng-terminal): NgTerminal is a web terminal that leverages xterm.js on Angular 7+. You can easily add it into your application by adding `<ng-terminal></ng-terminal>` into your component.
- [**tty-share**](https://tty-share.com): Extremely simple terminal sharing over the Internet.
- [**Ten Hands**](https://github.com/saisandeepvaddi/ten-hands): One place to run your command-line tasks.
- [**WebAssembly.sh**](https://webassembly.sh): A WebAssembly WASI browser terminal
- [**Gus**](https://gus.jp): A shared coding pad where you can run Python with xterm.js
- [**Linode**](https://linode.com): Linode uses xterm.js to provide users a web console for their Linode instances.
- [**FluffOS**](https://www.fluffos.info): Active maintained LPMUD driver with websocket support.
- [**x-terminal**](https://atom.io/packages/x-terminal): Atom plugin for providing terminals inside your Atom workspace.
- [**CoCalc**](https://cocalc.com/): Lots of free software pre-installed, to chat, collaborate, develop, program, publish, research, share, teach, in C++, HTML, Julia, Jupyter, LaTeX, Markdown, Python, R, SageMath, Scala, ...
- [**Dank Domain**](https://www.DDgame.us/): Open source multiuser medieval game supporting old & new terminal emulation.
- [**DockerStacks**](https://docker-stacks.com/): Local LAMP/LEMP development studio
- [**Codecademy**](https://codecademy.com/): Uses xterm.js in its courses on Bash.
- [**Laravel Ssh Web Client**](https://github.com/roke22/Laravel-ssh-client): Laravel server inventory with ssh web client to connect at server using xterm.js
- [**Replit**](https://replit.com): Collaborative browser based IDE with support for 50+ different languages.
- [**TeleType**](https://github.com/akshaykmr/TeleType): cli tool that allows you to share your terminal online conveniently. Show off mad cli-fu, help a colleague, teach, or troubleshoot.
- [**Intervue**](https://www.intervue.io): Pair programming for interviews. Multiple programming languages are supported, with results displayed by xterm.js.
- [**TRASA**](https://trasa.io): Zero trust access to Web, SSH, RDP, and Database services.
- [**Commas**](https://github.com/CyanSalt/commas): Commas is a hackable terminal and command runner.
- [**Devtron**](https://github.com/devtron-labs/devtron): Software Delivery Workflow For Kubernetes.
- [**NxShell**](https://github.com/nxshell/nxshell): An easy to use new terminal for SSH.
- [**gifcast**](https://dstein64.github.io/gifcast/): Converts an asciinema cast to an animated GIF.
- [**WizardWebssh**](https://gitlab.com/mikeramsey/wizardwebssh): A terminal with Pyqt5 Widget for embedding, which can be used as an ssh client to connect to your ssh servers. It is written in Python, based on tornado, paramiko, and xterm.js.
- [**Wizard Assistant**](https://wizardassistant.com/): Wizard Assistant comes with advanced automation tools, preloaded common and special time-saving commands, and a built-in SSH terminal. Now you can remotely administer, troubleshoot, and analyze any system with ease.
- [**ucli**](https://github.com/tsadarsh/ucli): Command Line for everyone :family_man_woman_girl_boy: at [www.ucli.tech](https://www.ucli.tech).
- [**Tess**](https://github.com/SquitchYT/Tess/): Simple Terminal Fully Customizable for Everyone. Discover more at [tessapp.dev](https://tessapp.dev)
- [**HashiCorp Nomad**](https://www.nomadproject.io/): A container orchestrator with the ability to connect to remote tasks via a web interface using websockets and xterm.js.
- [**TermPair**](https://github.com/cs01/termpair): View and control terminals from your browser with end-to-end encryption
- [**gdbgui**](https://github.com/cs01/gdbgui): Browser-based frontend to gdb (gnu debugger)
- [**goormIDE**](https://ide.goorm.io/): Run almost every programming languages with real-time collaboration, live pair programming, and built-in messenger.
- [**FleetDeck**](https://fleetdeck.io): Remote desktop & virtual terminal
- [**OpenSumi**](https://github.com/opensumi/core): A framework helps you quickly build Cloud or Desktop IDE products.
- [**KubeSail**](https://kubesail.com): The Self-Hosting Company - uses xterm to allow users to exec into kubernetes pods and build github apps
- [**WiTTY**](https://github.com/syssecfsu/witty): Web-based interactive terminal emulator that allows users to easily record, share, and replay console sessions.
- [**libv86 Terminal Forwarding**](https://github.com/hello-smile6/libv86-terminal-forwarding): Peer-to-peer SSH for the web, using WebRTC via [Bugout](https://github.com/chr15m/bugout) for data transfer and [v86](https://github.com/copy/v86) for web-based virtualization.
- [**hack.courses**](https://hack.courses): Interactive Linux and command-line classes using xterm.js to expose a real terminal available for everyone.
- [**Render**](https://render.com): Platform-as-a-service for your apps, websites, and databases using xterm.js to provide a command prompt for user containers and for streaming build and runtime logs.
- [**CloudTTY**](https://github.com/cloudtty/cloudtty): A Friendly Kubernetes CloudShell (Web Terminal).
- [**Go SSH Web Client**](https://github.com/wuchihsu/go-ssh-web-client): A simple SSH web client using Go, WebSocket and Xterm.js.
- [**web3os**](https://web3os.sh): A decentralized operating system for the next web
- [**Cratecode**](https://cratecode.com): Learn to program for free through interactive online lessons. Cratecode uses xterm.js to give users access to their own Linux environment.
- [**Super Terminal**](https://github.com/bugwheels94/super-terminal): It is a http based terminal for developers who dont like repetition and save time.
- [**graSSHopper**](https://grasshopper.coding.kiwi): A simple SSH client with file explorer, history and many more features.
- [**DomTerm**](https://domterm.org/xtermjs.html): Tiles and tabs. Detachable sessions (like tmux). [Remote connections](https://domterm.org/Remoting-over-ssh.html) using a nice ssh wrapper with predictive echo. Qt, Electron, Tauri/Wry, or desktop browser front-ends. Choose between xterm.js engine (faster) or native DomTerm (more functionality and graphics) - or both.
- [**Cloudtutor.io**](https://cloudtutor.io): innovative online learning platform that offers users access to an interactive lab.
- [**Helix Editor Playground**](https://github.com/tomgroenwoldt/helix-editor-playground): Online playground for the terminal based helix editor.
- [**Coder**](https://github.com/coder/coder): Self-Hosted Remote Development Environments
- [**Wave Terminal**](https://waveterm.dev): An open-source, ai-native, terminal built for seamless workflows.
- [**eva**](https://github.com/info24/eva): Eva is a web application for SSH remote login, developed in Go.
- [**OpenSFTP**](https://opensftp.com): Super beautiful SSH and SFTP integrated workspace client.
- [**balena**](https://www.balena.io/): Balena is a full-stack solution for developing, deploying, updating, and troubleshooting IoT Edge devices. We use xterm.js to manage & debug devices on [balenaCloud](https://www.balena.io/cloud).
- [**Filet Cloud**](https://github.com/fuglaro/filet-cloud): The lean and powerful personal cloud ⛅.
- [**pyTermTk**](https://github.com/ceccopierangiolieugenio/pyTermTk): Python Terminal Toolkit - a Spiced Up Cross Compatible TUI Library 🌶️, use xterm.js for the [HTML5 exporter](https://ceccopierangiolieugenio.github.io/pyTermTk/sandbox/sandbox.html).
- [**ecmaOS**](https://ecmaos.sh): A kernel and suite of applications tying modern web technologies into a browser-based operating system.
- [**LabEx**](https://labex.io): Interactive learning platform with hands-on labs and xterm.js-based online terminals, focused on learn-by-doing approach.
- [**EmuDevz**](https://afska.github.io/emudevz): A free coding game where players learn how to build an emulator from scratch.
- [**SSH Connection Manager**](https://github.com/Amtrend/ssh-manager): Modern web-based SSH terminal and SFTP manager with AES-256 encryption, PWA support, and session management.
- [**WooTTY**](https://github.com/icoretech/wootty): Flawless browser terminal for real operators.
- [And much more...](https://github.com/xtermjs/xterm.js/network/dependents?package_id=UGFja2FnZS0xNjYzMjc4OQ%3D%3D)

Do you use xterm.js in your application as well? Please [open a Pull Request](https://github.com/sourcelair/xterm.js/pulls) to include it here. We would love to have it on our list. Please add any new contributions to the end of the list.

## License Agreement

If you contribute code to this project, you implicitly allow your code to be distributed under the MIT license. You are also implicitly verifying that all code is your original work.

Copyright (c) 2017-2026, [The xterm.js authors](https://github.com/xtermjs/xterm.js/graphs/contributors) (MIT License)<br>
Copyright (c) 2014-2017, SourceLair, Private Company ([www.sourcelair.com](https://www.sourcelair.com/home)) (MIT License)<br>
Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)


================================================
FILE: addons/addon-attach/.gitignore
================================================
lib
node_modules


================================================
FILE: addons/addon-attach/.npmignore
================================================
# Blacklist - exclude everything except npm defaults such as LICENSE, etc
*
!*/

# Whitelist - lib/
!lib/**/*.d.ts

!lib/**/*.js
!lib/**/*.js.map

!lib/**/*.mjs
!lib/**/*.mjs.map

!lib/**/*.css

# Whitelist - src/
!src/**/*.ts
!src/**/*.d.ts

!src/**/*.js
!src/**/*.js.map

!src/**/*.css

# Blacklist - src/ test files
src/**/*.test.ts
src/**/*.test.d.ts
src/**/*.test.js
src/**/*.test.js.map

# Whitelist - typings/
!typings/*.d.ts


================================================
FILE: addons/addon-attach/LICENSE
================================================
Copyright (c) 2017, The xterm.js authors (https://github.com/xtermjs/xterm.js)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.


================================================
FILE: addons/addon-attach/README.md
================================================
## @xterm/addon-attach

An addon for [xterm.js](https://github.com/xtermjs/xterm.js) that enables attaching to a web socket. This addon requires xterm.js v4+.

### Install

```bash
npm install --save @xterm/addon-attach
```

### Usage

```ts
import { Terminal } from '@xterm/xterm';
import { AttachAddon } from '@xterm/addon-attach';

const terminal = new Terminal();
const attachAddon = new AttachAddon(webSocket);
terminal.loadAddon(attachAddon);
```

See the full [API](https://github.com/xtermjs/xterm.js/blob/master/addons/addon-attach/typings/addon-attach.d.ts) for more advanced usage.


================================================
FILE: addons/addon-attach/package.json
================================================
{
  "name": "@xterm/addon-attach",
  "version": "0.12.0",
  "author": {
    "name": "The xterm.js authors",
    "url": "https://xtermjs.org/"
  },
  "main": "lib/addon-attach.js",
  "module": "lib/addon-attach.mjs",
  "types": "typings/addon-attach.d.ts",
  "repository": "https://github.com/xtermjs/xterm.js/tree/master/addons/addon-attach",
  "license": "MIT",
  "keywords": [
    "terminal",
    "xterm",
    "xterm.js"
  ],
  "scripts": {
    "build": "../../node_modules/.bin/tsgo -p .",
    "prepackage": "npm run build",
    "package": "../../node_modules/.bin/webpack",
    "prepublishOnly": "npm run package",
    "start": "node ../../demo/start"
  }
}


================================================
FILE: addons/addon-attach/src/AttachAddon.ts
================================================
/**
 * Copyright (c) 2014, 2019 The xterm.js authors. All rights reserved.
 * @license MIT
 *
 * Implements the attach method, that attaches the terminal to a WebSocket stream.
 */

import type { Terminal, IDisposable, ITerminalAddon } from '@xterm/xterm';
import type { AttachAddon as IAttachApi } from '@xterm/addon-attach';

interface IAttachOptions {
  bidirectional?: boolean;
}

export class AttachAddon implements ITerminalAddon, IAttachApi {
  private _socket: WebSocket;
  private _bidirectional: boolean;
  private _disposables: IDisposable[] = [];

  constructor(socket: WebSocket, options?: IAttachOptions) {
    this._socket = socket;
    // always set binary type to arraybuffer, we do not handle blobs
    this._socket.binaryType = 'arraybuffer';
    this._bidirectional = !(options && options.bidirectional === false);
  }

  public activate(terminal: Terminal): void {
    this._disposables.push(
      addSocketListener(this._socket, 'message', ev => {
        const data: ArrayBuffer | string = ev.data;
        terminal.write(typeof data === 'string' ? data : new Uint8Array(data));
      })
    );

    if (this._bidirectional) {
      this._disposables.push(terminal.onData(data => this._sendData(data)));
      this._disposables.push(terminal.onBinary(data => this._sendBinary(data)));
    }

    this._disposables.push(addSocketListener(this._socket, 'close', () => this.dispose()));
    this._disposables.push(addSocketListener(this._socket, 'error', () => this.dispose()));
  }

  public dispose(): void {
    for (const d of this._disposables) {
      d.dispose();
    }
  }

  private _sendData(data: string): void {
    if (!this._checkOpenSocket()) {
      return;
    }
    this._socket.send(data);
  }

  private _sendBinary(data: string): void {
    if (!this._checkOpenSocket()) {
      return;
    }
    const buffer = new Uint8Array(data.length);
    for (let i = 0; i < data.length; ++i) {
      buffer[i] = data.charCodeAt(i) & 255;
    }
    this._socket.send(buffer);
  }

  private _checkOpenSocket(): boolean {
    switch (this._socket.readyState) {
      case WebSocket.OPEN:
        return true;
      case WebSocket.CONNECTING:
        throw new Error('Attach addon was loaded before socket was open');
      case WebSocket.CLOSING:
        console.warn('Attach addon socket is closing');
        return false;
      case WebSocket.CLOSED:
        throw new Error('Attach addon socket is closed');
      default:
        throw new Error('Unexpected socket state');
    }
  }
}

function addSocketListener<K extends keyof WebSocketEventMap>(socket: WebSocket, type: K, handler: (this: WebSocket, ev: WebSocketEventMap[K]) => any): IDisposable {
  socket.addEventListener(type, handler);
  return {
    dispose: () => {
      if (!handler) {
        // Already disposed
        return;
      }
      socket.removeEventListener(type, handler);
    }
  };
}


================================================
FILE: addons/addon-attach/src/tsconfig.json
================================================
{
  "compilerOptions": {
    "module": "commonjs",
    "target": "es2021",
    "lib": [
      "dom",
      "es2015"
    ],
    "rootDir": ".",
    "outDir": "../out",
    "sourceMap": true,
    "removeComments": true,
    "strict": true,
    "types": [
      "../../../node_modules/@types/mocha"
    ],
    "paths": {
      "@xterm/addon-attach": [
        "../typings/addon-attach.d.ts"
      ]
    }
  },
  "include": [
    "./**/*",
    "../../../typings/xterm.d.ts"
  ]
}


================================================
FILE: addons/addon-attach/test/AttachAddon.test.ts
================================================
/**
 * Copyright (c) 2019 The xterm.js authors. All rights reserved.
 * @license MIT
 */

import WebSocket = require('ws');

import test from '@playwright/test';
import { ITestContext, createTestContext, openTerminal, pollFor, timeout } from '../../../test/playwright/TestUtils';

let ctx: ITestContext;
test.beforeAll(async ({ browser }) => {
  ctx = await createTestContext(browser);
  await openTerminal(ctx);
});
test.afterAll(async () => await ctx.page.close());

test.describe('Search Tests', () => {

  test.beforeEach(async () => {
    await ctx.proxy.reset();
  });

  test('string', async function(): Promise<any> {
    const port = 8080;
    const server = new WebSocket.Server({ port });
    server.on('connection', socket => socket.send('foo'));
    await ctx.page.evaluate(`window.term.loadAddon(new window.AttachAddon(new WebSocket('ws://localhost:${port}')))`);
    await pollFor(ctx.page, `window.term.buffer.active.getLine(0).translateToString(true)`, 'foo');
    server.close();
  });

  test('utf8', async function(): Promise<any> {
    const port = 8080;
    const server = new WebSocket.Server({ port });
    const data = new Uint8Array([102, 111, 111]);
    server.on('connection', socket => socket.send(data));
    await ctx.page.evaluate(`window.term.loadAddon(new window.AttachAddon(new WebSocket('ws://localhost:${port}')))`);
    await pollFor(ctx.page, `window.term.buffer.active.getLine(0).translateToString(true)`, 'foo');
    server.close();
  });
});


================================================
FILE: addons/addon-attach/test/playwright.config.ts
================================================
import { PlaywrightTestConfig } from '@playwright/test';

const config: PlaywrightTestConfig = {
  testDir: '.',
  timeout: 10000,
  projects: [
    {
      name: 'Chromium',
      use: {
        browserName: 'chromium'
      }
    },
    {
      name: 'FirefoxStable',
      use: {
        browserName: 'firefox'
      }
    },
    {
      name: 'WebKit',
      use: {
        browserName: 'webkit'
      }
    }
  ],
  reporter: 'list',
  webServer: {
    command: 'npm run start',
    port: 3000,
    timeout: 120000,
    reuseExistingServer: !process.env.CI
  }
};
export default config;


================================================
FILE: addons/addon-attach/test/tsconfig.json
================================================
{
  "compilerOptions": {
    "module": "commonjs",
    "target": "ESNext",
    "lib": [
      "es2021",
    ],
    "rootDir": ".",
    "outDir": "../out-test",
    "sourceMap": true,
    "removeComments": true,
    "paths": {
      "common/*": [
        "../../../src/common/*"
      ],
      "browser/*": [
        "../../../src/browser/*"
      ],
      "*": [
        "./*"
      ]
    },
    "strict": true,
    "types": [
      "../../../node_modules/@types/node"
    ]
  },
  "include": [
    "./**/*",
    "../../../typings/xterm.d.ts"
  ],
  "references": [
    {
      "path": "../../../src/common"
    },
    {
      "path": "../../../src/browser"
    },
    {
      "path": "../../../test/playwright"
    }
  ]
}


================================================
FILE: addons/addon-attach/tsconfig.json
================================================
{
  "files": [],
  "include": [],
  "references": [
    { "path": "./src" },
    { "path": "./test" }
  ]
}


================================================
FILE: addons/addon-attach/typings/addon-attach.d.ts
================================================
/**
 * Copyright (c) 2017 The xterm.js authors. All rights reserved.
 * @license MIT
 */

import { Terminal, ITerminalAddon } from '@xterm/xterm';

declare module '@xterm/addon-attach' {
  export interface IAttachOptions {
    /**
     * Whether input should be written to the backend. Defaults to `true`.
     */
    bidirectional?: boolean;
  }

  export class AttachAddon implements ITerminalAddon {
    constructor(socket: WebSocket, options?: IAttachOptions);
    public activate(terminal: Terminal): void;
    public dispose(): void;
  }
}


================================================
FILE: addons/addon-attach/webpack.config.js
================================================
/**
 * Copyright (c) 2019 The xterm.js authors. All rights reserved.
 * @license MIT
 */

const path = require('path');

const addonName = 'AttachAddon';
const mainFile = 'addon-attach.js';

module.exports = {
  entry: `./out/${addonName}.js`,
  devtool: 'source-map',
  module: {
    rules: [
      {
        test: /\.js$/,
        use: ["source-map-loader"],
        enforce: "pre",
        exclude: /node_modules/
      }
    ]
  },
  output: {
    filename: mainFile,
    path: path.resolve('./lib'),
    library: addonName,
    libraryTarget: 'umd',
    // Force usage of globalThis instead of global / self. (This is cross-env compatible)
    globalObject: 'globalThis',
  },
  mode: 'production'
};


================================================
FILE: addons/addon-clipboard/.gitignore
================================================
lib
node_modules


================================================
FILE: addons/addon-clipboard/.npmignore
================================================
# Blacklist - exclude everything except npm defaults such as LICENSE, etc
*
!*/

# Whitelist - lib/
!lib/**/*.d.ts

!lib/**/*.js
!lib/**/*.js.map

!lib/**/*.mjs
!lib/**/*.mjs.map

!lib/**/*.css

# Whitelist - src/
!src/**/*.ts
!src/**/*.d.ts

!src/**/*.js
!src/**/*.js.map

!src/**/*.css

# Blacklist - src/ test files
src/**/*.test.ts
src/**/*.test.d.ts
src/**/*.test.js
src/**/*.test.js.map

# Whitelist - typings/
!typings/*.d.ts


================================================
FILE: addons/addon-clipboard/LICENSE
================================================
Copyright (c) 2023, The xterm.js authors (https://github.com/xtermjs/xterm.js)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.


================================================
FILE: addons/addon-clipboard/README.md
================================================
## @xterm/addon-clipboard

An addon for [xterm.js](https://github.com/xtermjs/xterm.js) that enables
accessing the system clipboard. This addon requires xterm.js v4+.

### Install

```bash
npm install --save @xterm/addon-clipboard
```

### Usage

```ts
import { Terminal } from 'xterm';
import { ClipboardAddon } from '@xterm/addon-clipboard';

const terminal = new Terminal();
const clipboardAddon = new ClipboardAddon();
terminal.loadAddon(clipboardAddon);
```

To use a custom clipboard provider

```ts
import { Terminal } from '@xterm/xterm';
import { ClipboardAddon, IClipboardProvider, ClipboardSelectionType } from '@xterm/addon-clipboard';

function b64Encode(data: string): string {
  // Base64 encode impl
}

function b64Decode(data: string): string {
  // Base64 decode impl
}

class MyCustomClipboardProvider implements IClipboardProvider {
  private _data: string
  public readText(selection: ClipboardSelectionType): Promise<string> {
    return Promise.resolve(b64Encode(this._data));
  }
  public writeText(selection: ClipboardSelectionType, data: string): Promise<void> {
    this._data = b64Decode(data);
    return Promise.resolve();
  }
}

const terminal = new Terminal();
const clipboardAddon = new ClipboardAddon(new MyCustomClipboardProvider());
terminal.loadAddon(clipboardAddon);
```

See the full [API](https://github.com/xtermjs/xterm.js/blob/master/addons/addon-clipboard/typings/addon-clipboard.d.ts) for more advanced usage.


================================================
FILE: addons/addon-clipboard/package.json
================================================
{
  "name": "@xterm/addon-clipboard",
  "version": "0.2.0",
  "author": {
    "name": "The xterm.js authors",
    "url": "https://xtermjs.org/"
  },
  "main": "lib/addon-clipboard.js",
  "module": "lib/addon-clipboard.mjs",
  "types": "typings/addon-clipboard.d.ts",
  "repository": "https://github.com/xtermjs/xterm.js/tree/master/addons/addon-clipboard",
  "license": "MIT",
  "keywords": [
    "terminal",
    "xterm",
    "xterm.js"
  ],
  "scripts": {
    "build": "../../node_modules/.bin/tsgo -p .",
    "prepackage": "npm run build",
    "package": "../../node_modules/.bin/webpack",
    "prepublishOnly": "npm run package",
    "start": "node ../../demo/start"
  },
  "dependencies": {
    "js-base64": "^3.7.5"
  }
}


================================================
FILE: addons/addon-clipboard/src/ClipboardAddon.ts
================================================
/**
 * Copyright (c) 2023 The xterm.js authors. All rights reserved.
 * @license MIT
 */

import type { IDisposable, ITerminalAddon, Terminal } from '@xterm/xterm';
import { type IClipboardProvider, ClipboardSelectionType, type IBase64 } from '@xterm/addon-clipboard';
import { Base64 as JSBase64 } from 'js-base64';

export class ClipboardAddon implements ITerminalAddon {
  private _terminal?: Terminal;
  private _disposable?: IDisposable;

  constructor(
    private _base64: IBase64 = new Base64(),
    private _provider: IClipboardProvider = new BrowserClipboardProvider()
  ) {}

  public activate(terminal: Terminal): void {
    this._terminal = terminal;
    this._disposable = terminal.parser.registerOscHandler(52, data => this._setOrReportClipboard(data));
  }

  public dispose(): void {
    return this._disposable?.dispose();
  }

  private _readText(sel: ClipboardSelectionType, data: string): void {
    const b64 = this._base64.encodeText(data);
    this._terminal?.input(`\x1b]52;${sel};${b64}\x07`, false);
  }

  private _setOrReportClipboard(data: string): boolean | Promise<boolean> {
    const args = data.split(';');
    if (args.length < 2) {
      return true;
    }

    const pc = args[0] as ClipboardSelectionType;
    const pd = args[1];
    if (pd === '?') {
      const text = this._provider.readText(pc);

      // Report clipboard
      if (text instanceof Promise) {
        return text.then((data) => {
          this._readText(pc, data);
          return true;
        });
      }

      this._readText(pc, text);
      return true;
    }

    // Clear clipboard if text is not a base64 encoded string.
    let text = '';
    try {
      text = this._base64.decodeText(pd);
    } catch {}


    const result = this._provider.writeText(pc, text);
    if (result instanceof Promise) {
      return result.then(() => true);
    }

    return true;
  }
}

export class BrowserClipboardProvider implements IClipboardProvider {
  public async readText(selection: ClipboardSelectionType): Promise<string> {
    if (selection !== 'c') {
      return Promise.resolve('');
    }
    return navigator.clipboard.readText();
  }

  public async writeText(selection: ClipboardSelectionType, text: string): Promise<void> {
    if (selection !== 'c') {
      return Promise.resolve();
    }
    return navigator.clipboard.writeText(text);
  }
}

export class Base64 implements IBase64 {
  public encodeText(data: string): string {
    return JSBase64.encode(data);
  }
  public decodeText(data: string): string {
    const text = JSBase64.decode(data);
    if (!JSBase64.isValid(data) || JSBase64.encode(text) !== data) {
      return '';
    }
    return text;
  }
}


================================================
FILE: addons/addon-clipboard/src/tsconfig.json
================================================
{
  "compilerOptions": {
    "module": "commonjs",
    "target": "es2021",
    "lib": [
      "dom",
      "es2015"
    ],
    "rootDir": ".",
    "outDir": "../out",
    "sourceMap": true,
    "removeComments": true,
    "strict": true,
    "types": [
      "../../../node_modules/@types/mocha"
    ],
    "paths": {
      "browser/*": [
        "../../../src/browser/*"
      ],
      "@xterm/addon-clipboard": [
        "../typings/addon-clipboard.d.ts"
      ]
    }
  },
  "include": [
    "./**/*",
    "../../../typings/xterm.d.ts"
  ],
  "references": [
    {
      "path": "../../../src/browser"
    }
  ]
}


================================================
FILE: addons/addon-clipboard/test/ClipboardAddon.test.ts
================================================
/**
 * Copyright (c) 2023 The xterm.js authors. All rights reserved.
 * @license MIT
 */

import test from '@playwright/test';
import { deepEqual, ok, strictEqual } from 'assert';
import { ITestContext, createTestContext, launchBrowser, openTerminal, timeout } from '../../../test/playwright/TestUtils';

let ctx: ITestContext;
test.beforeAll(async ({ browser }, testInfo) => {
  ctx = await createTestContext(browser);
  await openTerminal(ctx);
});
test.afterAll(async () => {
  await ctx.page.close();
});

test.describe('ClipboardAddon', () => {

  test.beforeEach(async ({}, testInfo) => {
    // DEBT: This test doesn't work since the migration to @playwright/test
    if (ctx.browser.browserType().name() !== 'chromium') {
      testInfo.skip();
      return;
    }
    if (ctx.browser.browserType().name() === 'chromium') {
      // Enable clipboard access in chromium without user gesture
      await ctx.page.context().grantPermissions(['clipboard-read', 'clipboard-write']);
    }
    await ctx.page.evaluate(`
      window.term.reset()
      window.clipboard?.dispose();
      window.clipboard = new ClipboardAddon();
      window.term.loadAddon(window.clipboard);
    `);
  });

  test.beforeEach(async () => {
    await ctx.proxy.reset();
  });

  const testDataEncoded = 'aGVsbG8gd29ybGQ=';
  const testDataDecoded = 'hello world';

  test.describe('write data', async function (): Promise<any> {
    test('simple string', async () => {
      await ctx.proxy.write(`\x1b]52;c;${testDataEncoded}\x07`);
      deepEqual(await ctx.page.evaluate(() => window.navigator.clipboard.readText()), testDataDecoded);
    });
    test('invalid base64 string', async () => {
      await ctx.proxy.write(`\x1b]52;c;${testDataEncoded}invalid\x07`);
      deepEqual(await ctx.page.evaluate(() => window.navigator.clipboard.readText()), '');
    });
    test('empty string', async () => {
      await ctx.proxy.write(`\x1b]52;c;${testDataEncoded}\x07`);
      await ctx.proxy.write(`\x1b]52;c;\x07`);
      deepEqual(await ctx.page.evaluate(() => window.navigator.clipboard.readText()), '');
    });
  });

  test.describe('read data', async function (): Promise<any> {
    test('simple string', async () => {
      await ctx.page.evaluate(`
        window.data = [];
        window.term.onData(e => data.push(e));
      `);
      await ctx.page.evaluate(() => window.navigator.clipboard.writeText('hello world'));
      await ctx.proxy.write(`\x1b]52;c;?\x07`);
      deepEqual(await ctx.page.evaluate('window.data'), [`\x1b]52;c;${testDataEncoded}\x07`]);
    });
    test('clear clipboard', async () => {
      await ctx.proxy.write(`\x1b]52;c;!\x07`);
      await ctx.proxy.write(`\x1b]52;c;?\x07`);
      deepEqual(await ctx.page.evaluate(() => window.navigator.clipboard.readText()), '');
    });
  });
});


================================================
FILE: addons/addon-clipboard/test/playwright.config.ts
================================================
import { PlaywrightTestConfig } from '@playwright/test';

const config: PlaywrightTestConfig = {
  testDir: '.',
  timeout: 10000,
  projects: [
    {
      name: 'Chromium',
      use: {
        browserName: 'chromium'
      }
    },
    {
      name: 'FirefoxStable',
      use: {
        browserName: 'firefox'
      }
    },
    {
      name: 'WebKit',
      use: {
        browserName: 'webkit'
      }
    }
  ],
  reporter: 'list',
  webServer: {
    command: 'npm run start',
    port: 3000,
    timeout: 120000,
    reuseExistingServer: !process.env.CI
  }
};
export default config;


================================================
FILE: addons/addon-clipboard/test/tsconfig.json
================================================
{
  "compilerOptions": {
    "module": "commonjs",
    "target": "ESNext",
    "lib": [
      "es2021",
    ],
    "rootDir": ".",
    "outDir": "../out-test",
    "sourceMap": true,
    "removeComments": true,
    "paths": {
      "common/*": [
        "../../../src/common/*"
      ],
      "browser/*": [
        "../../../src/browser/*"
      ],
      "*": [
        "./*"
      ]
    },
    "strict": true,
    "types": [
      "../../../node_modules/@types/node"
    ]
  },
  "include": [
    "./**/*",
    "../../../typings/xterm.d.ts"
  ],
  "references": [
    {
      "path": "../../../src/common"
    },
    {
      "path": "../../../src/browser"
    },
    {
      "path": "../../../test/playwright"
    }
  ]
}


================================================
FILE: addons/addon-clipboard/tsconfig.json
================================================
{
  "files": [],
  "include": [],
  "references": [
    { "path": "./src" },
    { "path": "./test" }
  ]
}


================================================
FILE: addons/addon-clipboard/typings/addon-clipboard.d.ts
================================================
/**
 * Copyright (c) 2023 The xterm.js authors. All rights reserved.
 * @license MIT
 */

import { Terminal, ITerminalAddon } from '@xterm/xterm';

declare module '@xterm/addon-clipboard' {
  /**
   * An xterm.js addon that enables accessing the system clipboard from
   * xterm.js.
   */
  export class ClipboardAddon implements ITerminalAddon {
    /**
     * Creates a new clipboard addon.
     * @param base64 An optional base64 encoder/decoder.
     * @param provider An optional clipboard provider.
     */
    constructor(base64?: IBase64, provider?: IClipboardProvider);

    /**
     * Activates the addon
     * @param terminal The terminal the addon is being loaded in.
     */
    public activate(terminal: Terminal): void;

    /**
     * Disposes the addon.
     */
    public dispose(): void
  }

  /**
   * Clipboard selection type. This is used to specify which selection buffer to
   * read or write to.
   * - SYSTEM `c`: The system clipboard.
   * - PRIMARY `p`: The primary clipboard. This is provided for compatibility
   *  with Linux X11.
   */
  export const enum ClipboardSelectionType {
    SYSTEM = 'c',
    PRIMARY = 'p',
  }

  export interface IBase64 {
    /**
    * Converts a utf-8 string to a base64 string.
    * @param data The utf-8 string to convert to base64 string.
    */
    encodeText(data: string): string;

    /**
    * Converts a base64 string to a utf-8 string.
    * @param data The base64 string to convert to utf-8 string.
    * @throws An error if the input is not valid base64.
    */
    decodeText(data: string): string;
  }

  /**
   * A default Base64 encoding and decoding type.
   **/
  export class Base64 implements IBase64 {
    /**
     * Converts a utf-8 string to a base64 string.
     * @param data The utf-8 string to convert to base64 string.
     */
    public encodeText(data: string): string;

    /**
     * Converts a base64 string to a utf-8 string.
     * @param data The base64 string to convert to utf-8 string.
     * @throws An error if the input is not valid base64.
     */
    public decodeText(data: string): string;
  }

  export interface IClipboardProvider {
    /**
     * Gets the clipboard content.
     * @param selection The clipboard selection to read.
     * @returns A promise that resolves with clipboard selection data.
     */
    readText(selection: ClipboardSelectionType): string | Promise<string>;

    /**
     * Sets the clipboard content.
     * @param selection The clipboard selection to set.
     * @param data The clipboard text to write.
     */
    writeText(selection: ClipboardSelectionType, text: string): void | Promise<void>;
  }

  /**
   * The clipboard provider interface that enables xterm.js to access the system clipboard.
   */
  export class BrowserClipboardProvider implements IClipboardProvider{
    /**
     * Reads text from the clipboard.
     * @param selection The selection type to read from.
     * @returns A promise that resolves with the text from the clipboard.
     */
    public readText(selection: ClipboardSelectionType): Promise<string>;

    /**
     * Writes text to the clipboard.
     * @param selection The selection type to write to.
     * @param data The text to write to the clipboard.
     * @returns A promise that resolves when the text has been written to the clipboard.
     */
    public writeText(selection: ClipboardSelectionType, data: string): Promise<void>;
  }
}


================================================
FILE: addons/addon-clipboard/webpack.config.js
================================================
/**
 * Copyright (c) 2023 The xterm.js authors. All rights reserved.
 * @license MIT
 */

const path = require('path');

const addonName = 'ClipboardAddon';
const mainFile = 'addon-clipboard.js';

module.exports = {
  entry: `./out/${addonName}.js`,
  devtool: 'source-map',
  module: {
    rules: [
      {
        test: /\.js$/,
        use: ["source-map-loader"],
        enforce: "pre",
        exclude: /node_modules/
      }
    ]
  },
  output: {
    filename: mainFile,
    path: path.resolve('./lib'),
    library: addonName,
    libraryTarget: 'umd'
  },
  mode: 'production'
};


================================================
FILE: addons/addon-fit/.gitignore
================================================
lib
node_modules


================================================
FILE: addons/addon-fit/.npmignore
================================================
# Blacklist - exclude everything except npm defaults such as LICENSE, etc
*
!*/

# Whitelist - lib/
!lib/**/*.d.ts

!lib/**/*.js
!lib/**/*.js.map

!lib/**/*.mjs
!lib/**/*.mjs.map

!lib/**/*.css

# Whitelist - src/
!src/**/*.ts
!src/**/*.d.ts

!src/**/*.js
!src/**/*.js.map

!src/**/*.css

# Blacklist - src/ test files
src/**/*.test.ts
src/**/*.test.d.ts
src/**/*.test.js
src/**/*.test.js.map

# Whitelist - typings/
!typings/*.d.ts


================================================
FILE: addons/addon-fit/LICENSE
================================================
Copyright (c) 2019, The xterm.js authors (https://github.com/xtermjs/xterm.js)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.


================================================
FILE: addons/addon-fit/README.md
================================================
## @xterm/addon-fit

An addon for [xterm.js](https://github.com/xtermjs/xterm.js) that enables fitting the terminal's dimensions to a containing element. This addon requires xterm.js v4+.

### Install

```bash
npm install --save @xterm/addon-fit
```

### Usage

```ts
import { Terminal } from '@xterm/xterm';
import { FitAddon } from '@xterm/addon-fit';

const terminal = new Terminal();
const fitAddon = new FitAddon();
terminal.loadAddon(fitAddon);
terminal.open(containerElement);
fitAddon.fit();
```

See the full [API](https://github.com/xtermjs/xterm.js/blob/master/addons/addon-fit/typings/addon-fit.d.ts) for more advanced usage.


================================================
FILE: addons/addon-fit/package.json
================================================
{
  "name": "@xterm/addon-fit",
  "version": "0.11.0",
  "author": {
    "name": "The xterm.js authors",
    "url": "https://xtermjs.org/"
  },
  "main": "lib/addon-fit.js",
  "module": "lib/addon-fit.mjs",
  "types": "typings/addon-fit.d.ts",
  "repository": "https://github.com/xtermjs/xterm.js/tree/master/addons/addon-fit",
  "license": "MIT",
  "keywords": [
    "terminal",
    "xterm",
    "xterm.js"
  ],
  "scripts": {
    "build": "../../node_modules/.bin/tsgo -p .",
    "prepackage": "npm run build",
    "package": "../../node_modules/.bin/webpack",
    "prepublishOnly": "npm run package",
    "start": "node ../../demo/start"
  }
}


================================================
FILE: addons/addon-fit/src/FitAddon.ts
================================================
/**
 * Copyright (c) 2017 The xterm.js authors. All rights reserved.
 * @license MIT
 */

import type { Terminal, ITerminalAddon, IRenderDimensions } from '@xterm/xterm';
import type { FitAddon as IFitApi } from '@xterm/addon-fit';
import { ViewportConstants } from 'browser/shared/Constants';

interface ITerminalDimensions {
  /**
   * The number of rows in the terminal.
   */
  rows: number;

  /**
   * The number of columns in the terminal.
   */
  cols: number;
}

const MINIMUM_COLS = 2;
const MINIMUM_ROWS = 1;

function getWindow(e: Node): Window {
  if (e?.ownerDocument?.defaultView) {
    return e.ownerDocument.defaultView;
  }

  return window;
}
function _getComputedStyle(el: HTMLElement): CSSStyleDeclaration {
  return getWindow(el).getComputedStyle(el, null);
}

export class FitAddon implements ITerminalAddon, IFitApi {
  private _terminal: Terminal | undefined;

  public activate(terminal: Terminal): void {
    this._terminal = terminal;
  }

  public dispose(): void {}

  public fit(): void {
    const dims = this.proposeDimensions();
    if (!dims || !this._terminal || isNaN(dims.cols) || isNaN(dims.rows)) {
      return;
    }

    // Force a full render
    if (this._terminal.rows !== dims.rows || this._terminal.cols !== dims.cols) {
      this._terminal.resize(dims.cols, dims.rows);
    }
  }

  public proposeDimensions(): ITerminalDimensions | undefined {
    if (!this._terminal) {
      return undefined;
    }

    if (!this._terminal.element || !this._terminal.element.parentElement) {
      return undefined;
    }

    const dims: IRenderDimensions | undefined = this._terminal.dimensions;

    if (!dims || dims.css.cell.width === 0 || dims.css.cell.height === 0) {
      return undefined;
    }

    const showScrollbar = this._terminal.options.scrollbar?.showScrollbar ?? true;
    const scrollbarWidth = (this._terminal.options.scrollback === 0 || !showScrollbar
      ? 0
      : (this._terminal.options.scrollbar?.width ?? ViewportConstants.DEFAULT_SCROLL_BAR_WIDTH));

    const parentElementStyle = _getComputedStyle(this._terminal.element.parentElement);
    const parentElementHeight = parseInt(parentElementStyle.getPropertyValue('height'));
    const parentElementWidth = Math.max(0, parseInt(parentElementStyle.getPropertyValue('width')));
    const elementStyle = _getComputedStyle(this._terminal.element);
    const elementPadding = {
      top: parseInt(elementStyle.getPropertyValue('padding-top')),
      bottom: parseInt(elementStyle.getPropertyValue('padding-bottom')),
      right: parseInt(elementStyle.getPropertyValue('padding-right')),
      left: parseInt(elementStyle.getPropertyValue('padding-left'))
    };
    const elementPaddingVer = elementPadding.top + elementPadding.bottom;
    const elementPaddingHor = elementPadding.right + elementPadding.left;
    const availableHeight = parentElementHeight - elementPaddingVer;
    const availableWidth = parentElementWidth - elementPaddingHor - scrollbarWidth;
    const geometry = {
      cols: Math.max(MINIMUM_COLS, Math.floor(availableWidth / dims.css.cell.width)),
      rows: Math.max(MINIMUM_ROWS, Math.floor(availableHeight / dims.css.cell.height))
    };
    return geometry;
  }
}


================================================
FILE: addons/addon-fit/src/tsconfig.json
================================================
{
  "compilerOptions": {
    "module": "commonjs",
    "target": "es2021",
    "lib": [
      "dom",
      "es2015"
    ],
    "rootDir": ".",
    "outDir": "../out",
    "sourceMap": true,
    "removeComments": true,
    "strict": true,
    "types": [
      "../../../node_modules/@types/mocha"
    ],
    "paths": {
      "browser/*": [
        "../../../src/browser/*"
      ],
      "@xterm/addon-fit": [
        "../typings/addon-fit.d.ts"
      ]
    }
  },
  "include": [
    "./**/*",
    "../../../typings/xterm.d.ts"
  ],
  "references": [
    {
      "path": "../../../src/browser"
    }
  ]
}


================================================
FILE: addons/addon-fit/test/FitAddon.test.ts
================================================
/**
 * Copyright (c) 2019 The xterm.js authors. All rights reserved.
 * @license MIT
 */

import test from '@playwright/test';
import { deepEqual, ok, strictEqual } from 'assert';
import { ITestContext, createTestContext, openTerminal, timeout } from '../../../test/playwright/TestUtils';

let ctx: ITestContext;
test.beforeAll(async ({ browser }) => {
  ctx = await createTestContext(browser);
  ctx.page.setViewportSize({ width: 1024, height: 768 });
  await openTerminal(ctx);
});
test.afterAll(async () => await ctx.page.close());

test.describe('FitAddon', () => {
  test.beforeEach(async function(): Promise<any> {
    await ctx.page.evaluate(`document.querySelector('#terminal-container').style.display=''`);
    await ctx.page.evaluate(`
      window.term.reset()
      window.fit?.dispose();
      window.fit = new FitAddon();
      window.term.loadAddon(window.fit);
    `);
  });

  // test.beforeEach(async function(): Promise<any> {
  //   await ctx.page.evaluate(`document.querySelector('#terminal-container').style.display=''`);
  //   await openTerminal(page);
  // });

  // after(async () => {
  //   await browser.close();
  // });

  // afterEach(async function(): Promise<any> {
  //   await ctx.proxy.dispose();
  // });

  test('no terminal', async function(): Promise<any> {
    await ctx.page.evaluate(`window.fit2 = new FitAddon();`);
    strictEqual(await ctx.page.evaluate(`window.fit2.proposeDimensions()`), undefined);
    await ctx.page.evaluate(`window.fit2.dispose();`);
  });

  test.describe('proposeDimensions', () => {
    test('default', async function(): Promise<any> {
      await setDimensions();
      const dimensions: {cols: number, rows: number} = await ctx.page.evaluate(`window.fit.proposeDimensions()`);
      ok(dimensions.cols > 85);
      ok(dimensions.cols < 88);
      ok(dimensions.rows > 24);
      ok(dimensions.rows < 29);
    });

    test('width', async function(): Promise<any> {
      await setDimensions(1008);
      const dimensions: {cols: number, rows: number} = await ctx.page.evaluate(`window.fit.proposeDimensions()`);
      ok(dimensions.cols > 108);
      ok(dimensions.cols < 111);
      ok(dimensions.rows > 24);
      ok(dimensions.rows < 29);
    });

    test('small', async function(): Promise<any> {
      await setDimensions(1, 1);
      deepEqual(await ctx.page.evaluate(`window.fit.proposeDimensions()`), {
        cols: 2,
        rows: 1
      });
    });

    test('hidden', async function(): Promise<any> {
      await ctx.proxy.dispose();
      await ctx.page.evaluate(`document.querySelector('#terminal-container').style.display='none'`);
      await ctx.page.evaluate(`window.term = new Terminal()`);
      await ctx.page.evaluate(`window.term.open(document.querySelector('#terminal-container'))`);
      await setDimensions();
      const dimensions: { cols: number, rows: number } | undefined = await ctx.page.evaluate(`window.fit.proposeDimensions()`);
      // The value of dims will be undefined if the char measure strategy falls back to the DOM
      // method, so only assert if it's not undefined.
      if (dimensions) {
        ok(dimensions.cols > 85);
        ok(dimensions.cols < 88);
        ok(dimensions.rows > 24);
        ok(dimensions.rows < 29);
      }
    });
  });

  test.describe('fit', () => {
    test('default', async function(): Promise<any> {
      await setDimensions();
      await ctx.page.evaluate(`window.fit.fit()`);
      const cols: number = await ctx.proxy.cols;
      const rows: number = await ctx.proxy.rows;
      ok(cols > 85);
      ok(cols < 88);
      ok(rows > 24);
      ok(rows < 29);
    });

    test('width', async function(): Promise<any> {
      await setDimensions(1008);
      await ctx.page.evaluate(`window.fit.fit()`);
      const cols: number = await ctx.proxy.cols;
      const rows: number = await ctx.proxy.rows;
      ok(cols > 108);
      ok(cols < 111);
      ok(rows > 24);
      ok(rows < 29);
    });

    test('small', async function(): Promise<any> {
      await setDimensions(1, 1);
      await ctx.page.evaluate(`window.fit.fit()`);
      strictEqual(await ctx.proxy.cols, 2);
      strictEqual(await ctx.proxy.rows, 1);
    });
  });
});

async function setDimensions(width: number = 800, height: number = 450): Promise<void> {
  await ctx.page.evaluate(`
    document.querySelector('#terminal-container').style.width='${width}px';
    document.querySelector('#terminal-container').style.height='${height}px';
    document.querySelector('#terminal-container').style.display='';
  `);
  // HACK: Await a short period as hiding #terminal-container can mess with other tests
  await timeout(500);
}


================================================
FILE: addons/addon-fit/test/playwright.config.ts
================================================
import { PlaywrightTestConfig } from '@playwright/test';

const config: PlaywrightTestConfig = {
  testDir: '.',
  timeout: 10000,
  projects: [
    {
      name: 'Chromium',
      use: {
        browserName: 'chromium'
      }
    },
    {
      name: 'FirefoxStable',
      use: {
        browserName: 'firefox'
      }
    },
    {
      name: 'WebKit',
      use: {
        browserName: 'webkit'
      }
    }
  ],
  reporter: 'list',
  webServer: {
    command: 'npm run start',
    port: 3000,
    timeout: 120000,
    reuseExistingServer: !process.env.CI
  }
};
export default config;


================================================
FILE: addons/addon-fit/test/tsconfig.json
================================================
{
  "compilerOptions": {
    "module": "commonjs",
    "target": "ESNext",
    "lib": [
      "es2021",
    ],
    "rootDir": ".",
    "outDir": "../out-test",
    "sourceMap": true,
    "removeComments": true,
    "paths": {
      "common/*": [
        "../../../src/common/*"
      ],
      "browser/*": [
        "../../../src/browser/*"
      ],
      "*": [
        "./*"
      ]
    },
    "strict": true,
    "types": [
      "../../../node_modules/@types/node"
    ]
  },
  "include": [
    "./**/*",
    "../../../typings/xterm.d.ts"
  ],
  "references": [
    {
      "path": "../../../src/common"
    },
    {
      "path": "../../../src/browser"
    },
    {
      "path": "../../../test/playwright"
    }
  ]
}


================================================
FILE: addons/addon-fit/tsconfig.json
================================================
{
  "files": [],
  "include": [],
  "references": [
    { "path": "./src" },
    { "path": "./test" }
  ]
}


================================================
FILE: addons/addon-fit/typings/addon-fit.d.ts
================================================
/**
 * Copyright (c) 2019 The xterm.js authors. All rights reserved.
 * @license MIT
 */

import { Terminal, ITerminalAddon } from '@xterm/xterm';

declare module '@xterm/addon-fit' {
  /**
   * An xterm.js addon that enables resizing the terminal to the dimensions of
   * its containing element.
   */
  export class FitAddon implements ITerminalAddon {
    /**
     * Creates a new fit addon.
     */
    constructor();

    /**
     * Activates the addon
     * @param terminal The terminal the addon is being loaded in.
     */
    public activate(terminal: Terminal): void;

    /**
     * Disposes the addon.
     */
    public dispose(): void;

    /**
     * Resizes the terminal to the dimensions of its containing element.
     */
    public fit(): void;

    /**
     * Gets the proposed dimensions that will be used for a fit.
     */
    public proposeDimensions(): ITerminalDimensions | undefined;
  }

  /**
   * Represents the dimensions of a terminal.
   */
  export interface ITerminalDimensions {
    /**
     * The number of rows in the terminal.
     */
    rows: number;

    /**
     * The number of columns in the terminal.
     */
    cols: number;
  }
}


================================================
FILE: addons/addon-fit/webpack.config.js
================================================
/**
 * Copyright (c) 2019 The xterm.js authors. All rights reserved.
 * @license MIT
 */

const path = require('path');

const addonName = 'FitAddon';
const mainFile = 'addon-fit.js';

module.exports = {
  entry: `./out/${addonName}.js`,
  devtool: 'source-map',
  module: {
    rules: [
      {
        test: /\.js$/,
        use: ["source-map-loader"],
        enforce: "pre",
        exclude: /node_modules/
      }
    ]
  },
  output: {
    filename: mainFile,
    path: path.resolve('./lib'),
    library: addonName,
    libraryTarget: 'umd',
    // Force usage of globalThis instead of global / self. (This is cross-env compatible)
    globalObject: 'globalThis',
  },
  mode: 'production'
};


================================================
FILE: addons/addon-image/.gitignore
================================================
node_modules/
*.swp
.lock-wscript
lib/
out/
out-test/
out-worker/
.nyc_output/
Makefile.gyp
*.Makefile
*.target.gyp.mk
*.node
example/*.log
docs/
npm-debug.log
/.idea/
.env
build/
.DS_Store
yarn.lock

# Keep bundled code out of Git
dist/
demo/dist/

# skip benchmark & inwasm folders, except builds
.benchmark/
timeline/
inwasm-sdks/
inwasm-builds/
!inwasm-builds/**/final.wat
!inwasm-builds/**/final.wasm
!inwasm-builds/**/definition.json


================================================
FILE: addons/addon-image/.npmignore
================================================
.github
fixture
overwrite
bootstrap.sh
tsconfig.json
webpack.config.js
test
out-test
out-esbuild
out-esbuild-test
inwasm-sdks
inwasm-builds


================================================
FILE: addons/addon-image/LICENSE
================================================
Copyright (c) 2019, 2020, 2021, 2022, 2023 The xterm.js authors (https://github.com/xtermjs/xterm.js)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.


================================================
FILE: addons/addon-image/README.md
================================================
## @xterm/addon-image

Inline image output in xterm.js. Supports SIXEL and iTerm's inline image protocol (IIP).


![](fixture/example.png)


### Install from npm

```bash
npm install --save @xterm/addon-image
```


### Usage

```ts
import { Terminal } from '@xterm/xterm';
import { ImageAddon, IImageAddonOptions } from '@xterm/addon-image';

// customize as needed (showing addon defaults)
const customSettings: IImageAddonOptions = {
  enableSizeReports: true,    // whether to enable CSI t reports (see below)
  pixelLimit: 16777216,       // max. pixel size of a single image
  sixelSupport: true,         // enable sixel support
  sixelScrolling: true,       // whether to scroll on image output
  sixelPaletteLimit: 256,     // initial sixel palette size
  sixelSizeLimit: 25000000,   // size limit of a single sixel sequence
  storageLimit: 128,          // FIFO storage limit in MB
  showPlaceholder: true,      // whether to show a placeholder for evicted images
  iipSupport: true,           // enable iTerm IIP support
  iipSizeLimit: 20000000,     // size limit of a single IIP sequence
  kittySupport: true,         // enable Kitty graphics support
  kittySizeLimit: 20000000    // size limit of a single Kitty sequence
}

// initialization
const terminal = new Terminal();
const imageAddon = new ImageAddon(customSettings);
terminal.loadAddon(imageAddon);
```

### General Notes

- *IMPORTANT:* The worker approach as done in previous releases got removed.
  The addon contructor no longer expects a worker path as first argument.

- By default the addon will activate these `windowOptions` reports on the terminal:
  - getWinSizePixels (CSI 14 t)
  - getCellSizePixels (CSI 16 t)
  - getWinSizeChars (CSI 18 t)
  
  to help applications getting useful terminal metrics for their image preparations. Set `enableSizeReports` in the constructor options to `false`, if you dont want the addon to alter these terminal settings. This is especially useful, if you have very strict security needs not allowing any terminal reports, or deal with `windowOptions` by other means.


### Operation Modes

- **SIXEL Support**  
  Set by default, change it with `{sixelSupport: true}`.

- **Scrolling On | Off**  
  By default scrolling is on, thus an image will advance the cursor at the bottom if needed.
  (see cursor positioning).

  If scrolling is off, the image gets painted from the top left of the current viewport
  and might be truncated if the image exceeds the viewport size.
  The cursor position does not change.

  You can customize this behavior with the constructor option `{sixelScrolling: false}`
  or with `DECSET 80` (off, binary: `\x1b [ ? 80 h`) and
  `DECRST 80` (on, binary: `\x1b [ ? 80 l`) during runtime.

- **Cursor Positioning**  
  If scrolling is set, the cursor will be placed at the first image column of the last image row (VT340 mode).
  Other cursor positioning modes as used by xterm or mintty are not supported.

- **SIXEL Palette Handling**  
  By default the addon limits the palette size to 256 registers (as demanded by the DEC specification).
  The limit can be increased to a maximum of 4096 registers (via `sixelPaletteLimit`).

  The default palette is a mixture of VT340 colors (lower 16 registers), xterm colors (up to 256) and zeros (up to 4096).
  There is no private/shared palette distinction, palette colors are always carried over from a previous sixel image.
  Restoring the default palette size and colors is possible with `XTSMGRAPHICS 1 ; 2` (binary: `\x1b[?1;2S`).
  It gets also restored automatically on RIS and DECSTR.

  Other than on older terminals, the underlying SIXEL library applies colors immediately to individual pixels
  (*printer mode*), thus it is technically possible to use more colors in one image than the palette has color slots.
  This feature is called *high-color* in libsixel.

  A terminal wide shared palette mode with late indexed coloring of the output is not supported,
  therefore palette animations cannot be used.

- **SIXEL Raster Attributes Handling**  
  If raster attributes were found in the SIXEL data (level 2), the image will always be truncated to the given height/width extend. We deviate here from the specification on purpose, as it allows several processing optimizations. For level 1 SIXEL data without any raster attributes the image can freely grow in width and height up to the last data byte, which has a much higher processing penalty. In general encoding libraries should not create level 1 data anymore and should not produce pixel information beyond the announced height/width extend. Both is discouraged by the >30 years old specification.

  Currently the SIXEL implementation of the addon does not take custom pixel sizes into account, a SIXEL pixel will map 1:1 to a screen pixel.

- **IIP Support (iTerm's Inline Image Protocol)**  
  Set by default, change it with `{iipSupport: true}`.

  The IIP implementation has the following features / restrictions (sequence will silently fail for unmet conditions):
  - Supported formats: PNG, JPEG and GIF
  - No animation support.
  - Image type hinting is not supported (always deducted from data header).
  - File download is not supported.
  - Filename gets parsed but not used.
  - Strict base64 handling as of RFC4648 §4 (standard alphabet, optional padding, no separator bytes allowed).
  - Payload size may not exceed CEIL(sizeParameter * 4 / 3).
  - Image scaling beyond terminal viewport size is allowed (e.g. `width=200%`).
  - Image pixel size is restricted by `pixelLimit` (pre- and post resizing).
  - Size parameter is restricted by `iipSizeLimit`.
  - Cursor positioning behaves the same as for sixel (see above).


### Storage and Drawing Settings

The internal storage holds images up to `storageLimit` (in MB, calculated as 4-channel RBGA unpacked, default 100 MB). Once hit images get evicted by FIFO rules. Furthermore images on the alternate buffer will always be erased on buffer changes.

The addon exposes two properties to interact with the storage limits at runtime:
- `storageLimit`  
  Change the value to your needs at runtime. This is especially useful, if you have multiple terminal
  instances running, that all add to one upper memory limit.
- `storageUsage`  
  Inspect the current memory usage of the image storage.

By default the addon will show a placeholder pattern for evicted images that are still part
of the terminal (e.g. in the scrollback). The pattern can be deactivated by toggling `showPlaceholder`.

### Image Data Retrieval

The addon provides the following API endpoints to retrieve raw image data as canvas:

- `getImageAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined`  
  Returns the canvas containing the original image data (not resized) at the given buffer position.
  The buffer position is the 0-based absolute index (including scrollback at top).

- `extractTileAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined`  
  Returns a canvas containing the actual single tile image data (maybe resized) at the given buffer position.
  The buffer position is the 0-based absolute index (including scrollback at top).
  Note that the canvas gets created and data copied over for every call, thus it is not suitable for performance critical actions.

### Memory Usage

The addon does most image processing in Javascript and therefore can occupy a rather big amount of memory. To get an idea where the memory gets eaten, lets look at the data flow and processing steps:
- Incomming image data chunk at `term.write` (terminal)  
  `term.write` might stock up incoming chunks. To circumvent this, you will need proper flow control (see xterm.js docs). Note that with image output it is more likely to run into this issue, as it can create lots of MBs in very short time.
- Sequence Parser (terminal)  
  The parser operates on a buffer containing up to 2^17 codepoints (~0.5 MB).
- Sequence Handler - Chunk Decoding (addon)  
  Image data chunks are processed immediately by the SIXEL decoder (streamlined). The decoder allocates memory for image
  pixels as needed. The allowed image size is restricted by `pixelLimit` (default 16M pixels), the decoder holds 2 pixel buffers at maximum during decoding (RGBA, ~128 MB for 16M pixels).
- Sequence Handler - Image Finalization (addon) 
  After decoding the final pixel buffer is grabbed by the sequence handler and written to a canvas of the same size (~64 MB for 16M pixels) and added to the storage.
- Image Storage (addon)  
  The image storage implements a FIFO cache, that will remove old images, if a new one arrives and `storageLimit` is hit (default 128 MB). The storage holds a canvas with the original image, and may additionally hold resized versions of images after a font rescaling. Both are accounted in `storageUsage` as a rough estimation of _pixels x 4 channels_.

Following the steps above, a rough estimation of maximum memory usage by the addon can be calculated with these formulas (in bytes):
```typescript
// storage alone
const storageBytes = storageUsage * storageLimit * 1024 * 1024;
// decoding alone
const decodingBytes = sixelSizeLimit + 2 * (pixelLimit * 4);

// totals
// inactive decoding
const totalInactive = storageBytes;
// active decoding
const totalActive = storageBytes + decodingBytes;
```

Note that browsers have offloading tricks for rarely touched memory segments, esp. `storageBytes` might not directly translate into real memory usage. Usage peaks will happen during active decoding of multiple big images due to the need of 2 full pixel buffers at the same time, which cannot be offloaded. Thus you may want to keep an eye on `pixelLimit` under limited memory conditions.  
Further note that the formulas above do not respect the Javascript object's overhead. Compared to the raw buffer needs the book keeping by these objects is rather small (<<5%).

_Why should I care about memory usage at all?_  
Well you don't have to, and it probably will just work fine with the addon defaults. But for bigger integrations, where much more data is held in the Javascript context (like multiple terminals on one page), it is likely to hit the engine's memory limit sooner or later under decoding and/or storage pressure.

_How can I adjust the memory usage?_  
- `pixelLimit`  
  A constructor setting, thus you would have to anticipate, whether (multiple) terminals in your page gonna do lots of concurrent decoding. Since this is normally not the case and the memory usage is only temporarily peaking, a rather high value should work even with multiple terminals in one page.
- `storageLimit`  
  A constructor and a runtime setting. In conjunction with `storageUsage` you can do runtime checks and adjust the limit to your needs. If you have to lower the limit below the current usage, images will be removed in FIFO order and may turn into a placeholder in the terminal's scrollback (if `showPlaceholder` is set). When adjusting keep in mind to leave enough room for memory peaking for decoding.
- `sixelSizeLimit`  
  A constructor setting. This has only a small impact on peaking memory during decoding. It is meant to avoid processing of overly big or broken SIXEL sequences at an earlier phase, thus may stop the decoder from entering its memory intensive task for potentially invalid data.


### Terminal Interaction

- Images already on the terminal screen will reshape on font-rescaling to keep the terminal cell coverage intact.
  This behavior might diverge from other terminals, but is in general the more desired one.
- On terminal resize images may expand to the right automatically, if they were right-truncated before.
  They never expand to the bottom, if they were bottom-truncated before (e.g. from scrolling-off).
- Text autowrapping from terminal resize may break and wrap images into multiple parts. This is unfortunate,
  but cannot be avoided, while sticking to the stronger terminal text-grid mechanics.
  (Yes images are a second class citizen on a mainly text-driven interface.)
- Characters written over an image will erase the image information for affected cells.
- Images are painted above BG/FG data not erasing it. More advanced "composition tricks" like painting images
  below FG/BG data are not possible. (We currently dont hook into BG/FG rendering itself.)
- Previous image data at a cell will be erased on new image data. (We currently have no transparency composition.)


### Performance & Latency

- Performance should be good enough for occasional SIXEL output from REPLs, up to downscaled movies
  from `mpv` with its SIXEL renderer (tested in the demo). For 3rd party xterm.js integrations this
  furthermore depends highly on the overall incoming data throughput.
- Image processing has a high latency. Most of the latency though is inherited from xterm.js' incoming data route
  (PTY -> server process -> websocket -> xterm.js async parsing), where every step creates more waiting time.
  Since we cannot do much about that "long line", keep that in mind when you try to run more demanding applications with realtime drawing and interactive response needs.


### Status

- Sixel support and image handling in xterm.js is considered beta quality.
- IIP support is in alpha stage. Please file a bug for any awkwardities.


### Changelog

- 0.5.0 integrate with xtermjs base repo (at v0.4.3)
- 0.4.3 defer canvas creation
- 0.4.2 fix image canvas resize
- 0.4.1 compat release for xterm.js 5.2.0
- 0.4.0 IIP support
- 0.3.1 compat release for xterm.js 5.1.0
- 0.3.0 important change: worker removed from addon
- 0.2.0 compat release for xterm.js 5.0.0
- 0.1.3 bugfix: avoid striping
- 0.1.2 bugfix: reset clear flag
- 0.1.1 bugfixes:
  - clear sticky image tiles on render
  - create folder from bootstrap.sh
  - fix peer dependency in package.json


================================================
FILE: addons/addon-image/fixture/endless.sh
================================================
#!/bin/bash

# sixel endless mode
# Should print an endless sine curve, abort with Ctrl-C.

period=200
amplitude=50

sixels=(@\$ A\$ C\$ G\$ O\$ _\$-)
pi=$(echo "scale=10; 4*a(1)" | bc -l)
run=true
trap run=false INT

echo -ne "\x1bP0;0;0q\"1;1#1;2;100;0;0#1"
y=0
while $run
do
  x=$(echo "s(2*${pi}*${y}/${period})*${amplitude}+2*${amplitude}+0.5" | bc -l)
  echo -ne "!${x%%.*}?${sixels[$((y%6))]}"
  (( y++ ))
done
echo -e "\x1b\\"


================================================
FILE: addons/addon-image/fixture/gcrglf.sh
================================================
#!/bin/bash

# GLF should move the text cursor downwards,
# even if no pixels were modified,
# when sixel scrolling is on.

echo -n $'\e[?80l'		# Ensure sixel scrolling is on (disable DECSDM)

clear
echo "A test of Sixel GLF (Graphics Line Feed) when sixel scrolling is on"
echo

# Move cursor down three using GLF ("-")
echo -e '\x1bPq$-$-$-$-\x1b\\'

# Show a single sixel line that says, "Your terminal ->"
cat <<'EOF'
P0;0;0q"1;1;244;21#0;2;0;0;0#1;2;80;80;80#0~~~NFFFN~~~n!4FN!68~NFN!64~bbb!42~rbbbBB!41~$#1???owwwo???O!4wo!68?owo!64?[[[!42?K[[[{{-#0!5~{woBFB`o{}!4~NFBpp!4xpbBF~~~x@@@~~~xxp@@!5~xxp@@b`pxwxpz!17~zpp???!5px!5~NFBpxxwxxpBBN!4~xxp@@b`pxwxpz~x@@@xxp@@pxx@@F!4~xppp@@!8~x@@@pxxwxp@B!5~zxXXXWXX@BF!10~??!24~!10^FNN^~~~$#1!5?BFN{w{]NB@!4?ow{MM!4EM[{w???E}}}???EEM}}!5?EEM}}[]MEFEMC!17?CMM~~~!5ME!5?ow{MEEFEEM{{o!4?EEM}}[]MEFEMC?E}}}EEM}}MEE}}w!4?EMMM}}!8?E}}}MEEFEM}{!5?CEeeefee}{w!10?~~!24?!10_woo_-#0!5~nFFF??FFN!5~wo_FF!4NFb_o!4~{o_!4Ffb??Fn~~~NFF??!4FN!23~_??!5NFFn~~~w__C!7KCC!4~NFF??!4FN!4~N???N~~??Fn~???N~~N!4F??!4Fn~~~F???Fn~~nF??Fn~~p??KMMMEE???Fn~~~N!4F??!4Fn!29~{{}!4~$#1!5?Owww~~wwo!5?FN^ww!4ow[^N!4?BN^!4wW[~~wO???oww~~!4wo!23?^~~!5owwO???F^^z!7rzz!4?oww~~!4wo!4?o~~~o??~~wO?~~~o??o!4w~~!4wO???w~~~wO??Ow~~wO??M~~rpppxx~~~wO???o!4w~~!4wO!29?BB@-#0!25FE!63FE!15FE!77FE!60F$#1!25?@!63?@!15?@!77?@-\
EOF

sleep 1
tput cup 2 30

# Show four lines saying, "<- A genuine VT340 would end here"
cat <<'EOF'
P0;0;0q"1;1;144;80#0;2;0;0;0#1;2;80;80;80#0~~rpp@@`@BN!25~!11^!5~^^^N^^^!6~!7^N^^^!5~!4^~~~!5^!6~^^^WWW!8~!7^N^^^!8~^^^N^^^!5~$#1??KMM}}]}{o!25?!11_!5?___o___!6?!7_o___!5?!4_???!5_!6?___fff!8?!7_o___!8?___o___-#0~~NB??EFE??@F^!19~B??{!4}{W??}}~~B@?K!5MK??B~~~}???{!4}{??!4~}???~~~}}{??!6~}{{{??!8~}???{!4}{??!4~B@?K!5MK??B~~$#1??o{~~xwx~~}w_!19?{~~B!4@Bf~~@@??{}~r!5pr~~{???@~~~B!4@B~~!4?@~~~???@@B~~!6?@BBB~~!8?@~~~B!4@B~~!4?{}~r!5pr~~{-#0rpoopr~~~zpooopr!17~}{ww!4pwW??!4~}wwprrb!4rpp~~~pooopz~~zpoopz!4~{w!4pxwoopz~~~r!4poo!4pz~~~pooopz~~zpoopz~~}wwprrb!4rpp~~$#1KMNNMK???CMNNNMK!17?@BFF!4MFf~~!4?@FFMKK[!4KMM???MNNNMC??CMNNMC!4?BF!4MEFNNMC???K!4MNN!4MC???MNNNMC??CMNNMC??@FFMKK[!4KMM-#0!32~^NNNKWwww[[MNNN^~!13N!5~NN!5FNN^!10~N!4F!8~NN!4FN^!36~$#1!32?_ooorfFFFbbpooo_?!13o!5?oo!5woo_!10?o!4w!8?oo!4wo_-#0!32~}{o?AM!4~E?_w}}~o_o}}???}}}__!5~}}~fFFFAOw!6~^FB_w{???!6~B??}!4~{??!35~$#1!32?@BN~|p!4?x~^F@@?N^N@@~~~@@@^^!5?@@?Wwww|nF!6?_w{^FB~~~!6?{~~@!4?B~~-#0!36~{_?FB?o}!7~^NN???NN^!6~!8NE?_x!4~poooP@@???X!5~{o?F!4NB_o!35~$#1!36?B^~w{~N@!7?_oo~~~oo_!6?!8ox~^E!4?MNNNm}}~~~e!5?BN~w!4o{^N-#0!38~}}}!11~!8}!8~!6}!13~!6}!9~!4}!38~$#1!38?@@@!11?!8@!8?!6@!13?!6@!9?!4@-#0!5^!5~!5^!5~!7^!6~!4^~~~!5^!6~{www??!11~^^^N^\W???!22~^^^N^^^!6~!7^N^^^!8~^^^N^\W???~~$#1!5_!5?!5_!5?!7_!6?!4_???!5_!6?BFFF~~!11?___o_af~~~!22?___o___!6?!7_o___!8?___o_af~~~-#0}{??CMB@@FM??o{~~B@?{{!4}{w?@~~~}???~~~}}{??!10~??!8~B??{!5}{???!19~B@?K!5MK??B~~~}???{!4}{??!4~B??{!5}{???~~$#1@B~~zp{}}wp~~NB??{}~BB!4@BF~}???@~~~???@@B~~!10?~~!8?{~~B!5@B~~~!19?{}~r!5pr~~{???@~~~B!4@B~~!4?{~~B!5@B~~~-#0~~~woow~}woo{!4~}{wpprbrrpww{!5~{w!4pxwoopz~~~r!4poo!4pz~~~}{ww!5pwooopz!17~}wwprrb!4rpp~~~pooopz~~zpoopz~~}{ww!5pwooopz$#1???FNNF?@FNNB!4?@BFMMK[KKMFFB!5?BF!4MEFNNMC???K!4MNN!4MC???@BFF!5MFNNNMC!17?@FFMKK[!4KMM???MNNNMC??CMNNMC??@BFF!5MFNNNMC-#0!40~n!4F!99~$#1!40?O!4w-#0!10~^^n!29~???b!4rbBF!4~^NFbrrprrbFF^!4~rrbBBFBbrrrbv~~^NFbrrprrbFF^!42~$#1!10?__O!29?~~~[!4K[{w!4?_ow[KKMKK[ww_!4?KK[{{w{[KKK[G??_ow[KKMKK[ww_-#0!9~}{wq!10}!18~N???N^~~^N??N^~~o??H!6XWGG!4~^NN??!4N^!5~o??H!6XWGG!42~$#1!9?@BFL!10@!18?o~~~o_??_o~~o_??N~~u!6efvv!4?_oo~~!4o_!5?N~~u!6efvv-#0!41B!6ABB!6A!5BAAA?!6A!4B!10A!8BAAA?!6A!42B$#1!41?!6@??!6@!5?@@@B!6@!4?!10@!8?@@@B!6@$-\This text should be indented.
EOF

# For more details, please see:
# https://github.com/jerch/xterm-addon-image/issues/37

# By default, sixel is in a 2:1 aspect ratio, which means
# every sixel graphics linefeed (GLF) adds another 12 pixels.
# With four GLFs, we have five sixel lines = 5 * 12 =  60 pixels.

# Which text line that ends up on depends upon the height of your
# font. On the VT340, the font is 20 pixels high. 

# On a VT340 sixel scrolling is on by default. DEC refers to this by
# two different names "sixel scrolling" and its negation, "DECSDM"
# (Sixel Display Mode). They control the same thing, so when DECSDM is
# on, sixel scrolling is off, and vice versa. 

# When DECSDM is on, the graphic line feeds do not affect the text cursor.


# How hackerb9 created the two sixel test images:
#
# convert -family "Courier" -style normal -density 72 -pointsize 26 -interline-spacing -12 -gravity center -fill gray80 -background none label:$'A genuine\nVT340\nwould end\n← here  '  +trim +dither -colors 2 sixel:- > reference.six
#
# convert -family "Courier" -style normal -density 72 -pointsize 26 -interline-spacing -12 -gravity center -fill gray80 -background none label:$'Your terminal →'  +trim -bordercolor none -border 2 +dither -colors 2 sixel:- > yourterminal.six



================================================
FILE: addons/addon-image/fixture/growing_rect.js
================================================
const sixelEncode = require('../node_modules/sixel/lib/SixelEncoder').image2sixel;
const toRGBA8888 = require('../node_modules/sixel/lib/Colors').toRGBA8888;

function createRect(size, color) {
  const pixels = new Uint32Array(size * size);
  pixels.fill(toRGBA8888(...color));
  return sixelEncode(new Uint8ClampedArray(pixels.buffer), size, size);
}

function createRectMinusOne(size, color) {
  const pixels = new Uint32Array(size * size);
  if (size - 1) {
    const sub = new Uint32Array(size - 1);
    sub.fill(toRGBA8888(...color));
    const last = size * (size - 1);
    for (let y = 0; y < last; y += size) {
      pixels.set(sub, y);
    }
  }
  return sixelEncode(new Uint8ClampedArray(pixels.buffer), size, size);
}

async function main() {
  // clear + cursor and sixelScrolling off
  process.stdout.write('\x1b[2J\x1b[?25;80h');

  for (let i = 1; i < 300; ++i) {
    await new Promise(res => setTimeout(() => {
      process.stdout.write(createRect(i, [0, 255, 0]));
      res();
    }, 5));
  }
  for (let i = 299; i >= 1; --i) {
    await new Promise(res => setTimeout(() => {
      process.stdout.write(createRectMinusOne(i, [0, 255, 0]));
      res();
    }, 5));
  }

  // re-enable cursor and sixel scrolling
  process.stdout.write('\x1b[2J\x1b[?25;80l');
}

main();


================================================
FILE: addons/addon-image/fixture/iip/palette.iip
================================================
]1337;File=inline=1;size=525;name=Li4vcGFsZXR0ZS5wbmc=:iVBORw0KGgoAAAANSUhEUgAAAoAAAABQCAYAAACJbMQlAAAABmJLR0QA/wD/AP+gvaeTAAABwklEQVR4nO3dwQnEMAwAQedIIem/yVwLBj0C3pm3uAO/Fj2ia631rh3P1lRu7vnof0+Z836zOe83m/N+sznvN5vzfrM57zeb+23+HAAAhxCAAAAxAhAAIEYAAgDECEAAgBgBCAAQIwABAGIEIABAjAAEAIi59z8tDQDACWwAAQBiBCAAQIwABACIEYAAADECEAAgRgACAMQIQACAGAEIABAjAAEAYlwCAQCIsQEEAIgRgAAAMQIQACBGAAIAxAhAAIAYAQgAECMAAQBiBCAAQIwABACIcQkEACDGBhAAIEYAAgDECEAAgBgBCAAQIwABAGIEIABAjAAEAIgRgAAAMQIQACDGJRAAgBgbQACAGAEIABAjAAEAYgQgAECMAAQAiBGAAAAxAhAAIEYAAgDECEAAgBiXQAAAYmwAAQBiBCAAQIwABACIEYAAADECEAAgRgACAMQIQACAGAEIABAjAAEAYlwCAQCIsQEEAIgRgAAAMQIQACBGAAIAxAhAAIAYAQgAECMAAQBiBCAAQIwABACIcQkEACDGBhAAIEYAAgDECEAAgBgBCAAQIwABAGIEIABAjAAEAIgRgAAAMQIQACDmDz4lC02AaqMRAAAAAElFTkSuQmCC


================================================
FILE: addons/addon-image/fixture/iip/spinfox.iip
================================================
]1337;File=inline=1;size=613321;name=Li4vdGVzdGltYWdlcy9zcGluZm94LnBuZw==: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
Download .txt
gitextract_4c2m1yy1/

├── .devcontainer/
│   └── devcontainer.json
├── .editorconfig
├── .gitattributes
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   ├── config.yml
│   │   └── feature_request.md
│   ├── copilot-instructions.md
│   ├── hooks/
│   │   └── setupRepo.json
│   ├── instructions/
│   │   ├── benchmark.instructions.md
│   │   └── unit-test.instructions.md
│   └── workflows/
│       ├── ci.yml
│       ├── codeql-analysis.yml
│       ├── copilot-setup-steps.yml
│       └── release.yml
├── .gitignore
├── .gitmodules
├── .npmignore
├── .nvmrc
├── .vscode/
│   ├── extensions.json
│   ├── launch.json
│   ├── settings.json
│   └── tasks.json
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── addons/
│   ├── addon-attach/
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── AttachAddon.ts
│   │   │   └── tsconfig.json
│   │   ├── test/
│   │   │   ├── AttachAddon.test.ts
│   │   │   ├── playwright.config.ts
│   │   │   └── tsconfig.json
│   │   ├── tsconfig.json
│   │   ├── typings/
│   │   │   └── addon-attach.d.ts
│   │   └── webpack.config.js
│   ├── addon-clipboard/
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── ClipboardAddon.ts
│   │   │   └── tsconfig.json
│   │   ├── test/
│   │   │   ├── ClipboardAddon.test.ts
│   │   │   ├── playwright.config.ts
│   │   │   └── tsconfig.json
│   │   ├── tsconfig.json
│   │   ├── typings/
│   │   │   └── addon-clipboard.d.ts
│   │   └── webpack.config.js
│   ├── addon-fit/
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── FitAddon.ts
│   │   │   └── tsconfig.json
│   │   ├── test/
│   │   │   ├── FitAddon.test.ts
│   │   │   ├── playwright.config.ts
│   │   │   └── tsconfig.json
│   │   ├── tsconfig.json
│   │   ├── typings/
│   │   │   └── addon-fit.d.ts
│   │   └── webpack.config.js
│   ├── addon-image/
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── fixture/
│   │   │   ├── endless.sh
│   │   │   ├── gcrglf.sh
│   │   │   ├── growing_rect.js
│   │   │   ├── iip/
│   │   │   │   ├── palette.iip
│   │   │   │   ├── spinfox.iip
│   │   │   │   ├── w3c_gif.iip
│   │   │   │   ├── w3c_jpg.iip
│   │   │   │   └── w3c_png.iip
│   │   │   ├── inspect_palette.sh
│   │   │   ├── overdraw.sh
│   │   │   ├── palette.blob
│   │   │   ├── palette.sixel
│   │   │   └── textcursor.sh
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── IIPHandler.ts
│   │   │   ├── IIPHeaderParser.test.ts
│   │   │   ├── IIPHeaderParser.ts
│   │   │   ├── IIPImageStorage.ts
│   │   │   ├── IIPMetrics.test.ts
│   │   │   ├── IIPMetrics.ts
│   │   │   ├── ImageAddon.ts
│   │   │   ├── ImageRenderer.ts
│   │   │   ├── ImageStorage.ts
│   │   │   ├── SixelHandler.ts
│   │   │   ├── SixelImageStorage.ts
│   │   │   ├── Types.ts
│   │   │   ├── kitty/
│   │   │   │   ├── KittyGraphicsHandler.ts
│   │   │   │   ├── KittyGraphicsTypes.test.ts
│   │   │   │   ├── KittyGraphicsTypes.ts
│   │   │   │   └── KittyImageStorage.ts
│   │   │   └── tsconfig.json
│   │   ├── test/
│   │   │   ├── ImageAddon.test.ts
│   │   │   ├── KittyGraphics.test.ts
│   │   │   ├── playwright.config.ts
│   │   │   └── tsconfig.json
│   │   ├── tsconfig.json
│   │   ├── typings/
│   │   │   └── addon-image.d.ts
│   │   └── webpack.config.js
│   ├── addon-ligatures/
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── fonts/
│   │   │   └── FiraCode-Regular.otf
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── LigaturesAddon.ts
│   │   │   ├── Types.ts
│   │   │   ├── font.ts
│   │   │   ├── fontLigatures/
│   │   │   │   ├── flatten.ts
│   │   │   │   ├── index.test.ts
│   │   │   │   ├── index.ts
│   │   │   │   ├── merge.test.ts
│   │   │   │   ├── merge.ts
│   │   │   │   ├── mergeRange.test.ts
│   │   │   │   ├── mergeRange.ts
│   │   │   │   ├── processors/
│   │   │   │   │   ├── 6-1.ts
│   │   │   │   │   ├── 6-2.ts
│   │   │   │   │   ├── 6-3.ts
│   │   │   │   │   ├── 8-1.ts
│   │   │   │   │   ├── classDef.ts
│   │   │   │   │   ├── coverage.ts
│   │   │   │   │   ├── helper.ts
│   │   │   │   │   └── substitution.ts
│   │   │   │   ├── tables.ts
│   │   │   │   ├── types.ts
│   │   │   │   └── walk.ts
│   │   │   ├── index.ts
│   │   │   ├── parse.test.ts
│   │   │   ├── parse.ts
│   │   │   └── tsconfig.json
│   │   ├── test/
│   │   │   ├── LigaturesAddon.test.ts
│   │   │   └── tsconfig.json
│   │   ├── tsconfig.json
│   │   ├── typings/
│   │   │   └── addon-ligatures.d.ts
│   │   └── webpack.config.js
│   ├── addon-progress/
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── ProgressAddon.ts
│   │   │   └── tsconfig.json
│   │   ├── test/
│   │   │   ├── ProgressAddon.test.ts
│   │   │   ├── playwright.config.ts
│   │   │   └── tsconfig.json
│   │   ├── tsconfig.json
│   │   ├── typings/
│   │   │   └── addon-progress.d.ts
│   │   └── webpack.config.js
│   ├── addon-search/
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── fixtures/
│   │   │   └── issue-2444
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── DecorationManager.ts
│   │   │   ├── SearchAddon.ts
│   │   │   ├── SearchEngine.test.ts
│   │   │   ├── SearchEngine.ts
│   │   │   ├── SearchLineCache.test.ts
│   │   │   ├── SearchLineCache.ts
│   │   │   ├── SearchResultTracker.ts
│   │   │   ├── SearchState.ts
│   │   │   └── tsconfig.json
│   │   ├── test/
│   │   │   ├── SearchAddon.test.ts
│   │   │   ├── playwright.config.ts
│   │   │   └── tsconfig.json
│   │   ├── tsconfig.json
│   │   ├── typings/
│   │   │   └── addon-search.d.ts
│   │   └── webpack.config.js
│   ├── addon-serialize/
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── README.md
│   │   ├── benchmark/
│   │   │   ├── SerializeAddon.benchmark.ts
│   │   │   ├── benchmark.json
│   │   │   └── tsconfig.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── SerializeAddon.test.ts
│   │   │   ├── SerializeAddon.ts
│   │   │   └── tsconfig.json
│   │   ├── test/
│   │   │   ├── SerializeAddon.test.ts
│   │   │   ├── playwright.config.ts
│   │   │   └── tsconfig.json
│   │   ├── tsconfig.json
│   │   ├── typings/
│   │   │   └── addon-serialize.d.ts
│   │   └── webpack.config.js
│   ├── addon-unicode-graphemes/
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── benchmark/
│   │   │   ├── UnicodeGraphemeAddon.benchmark.ts
│   │   │   ├── benchmark.json
│   │   │   └── tsconfig.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── UnicodeGraphemeProvider.ts
│   │   │   ├── UnicodeGraphemesAddon.ts
│   │   │   ├── third-party/
│   │   │   │   ├── UnicodeProperties.ts
│   │   │   │   ├── tiny-inflate.ts
│   │   │   │   └── unicode-trie.ts
│   │   │   └── tsconfig.json
│   │   ├── test/
│   │   │   ├── UnicodeGraphemesAddon.test.ts
│   │   │   ├── playwright.config.ts
│   │   │   └── tsconfig.json
│   │   ├── tsconfig.json
│   │   ├── typings/
│   │   │   └── addon-unicode-graphemes.d.ts
│   │   └── webpack.config.js
│   ├── addon-unicode11/
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── Unicode11Addon.ts
│   │   │   ├── UnicodeV11.ts
│   │   │   └── tsconfig.json
│   │   ├── test/
│   │   │   ├── Unicode11Addon.test.ts
│   │   │   ├── playwright.config.ts
│   │   │   └── tsconfig.json
│   │   ├── tsconfig.json
│   │   ├── typings/
│   │   │   └── addon-unicode11.d.ts
│   │   └── webpack.config.js
│   ├── addon-web-fonts/
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── WebFontsAddon.ts
│   │   │   └── tsconfig.json
│   │   ├── test/
│   │   │   ├── WebFontsAddon.test.ts
│   │   │   ├── playwright.config.ts
│   │   │   └── tsconfig.json
│   │   ├── tsconfig.json
│   │   ├── typings/
│   │   │   └── addon-web-fonts.d.ts
│   │   └── webpack.config.js
│   ├── addon-web-links/
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── WebLinkProvider.ts
│   │   │   ├── WebLinksAddon.ts
│   │   │   └── tsconfig.json
│   │   ├── test/
│   │   │   ├── WebLinksAddon.test.ts
│   │   │   ├── playwright.config.ts
│   │   │   └── tsconfig.json
│   │   ├── tsconfig.json
│   │   ├── typings/
│   │   │   └── addon-web-links.d.ts
│   │   └── webpack.config.js
│   └── addon-webgl/
│       ├── .gitignore
│       ├── .npmignore
│       ├── LICENSE
│       ├── README.md
│       ├── package.json
│       ├── src/
│       │   ├── CellColorResolver.ts
│       │   ├── CharAtlasCache.ts
│       │   ├── CharAtlasUtils.ts
│       │   ├── Constants.ts
│       │   ├── CursorBlinkStateManager.ts
│       │   ├── DevicePixelObserver.ts
│       │   ├── GlyphRenderer.ts
│       │   ├── RectangleRenderer.ts
│       │   ├── RenderModel.ts
│       │   ├── TextureAtlas.ts
│       │   ├── TypedArray.test.ts
│       │   ├── TypedArray.ts
│       │   ├── Types.ts
│       │   ├── WebglAddon.ts
│       │   ├── WebglRenderer.ts
│       │   ├── WebglUtils.ts
│       │   ├── customGlyphs/
│       │   │   ├── CustomGlyphDefinitions.ts
│       │   │   ├── CustomGlyphRasterizer.ts
│       │   │   └── Types.ts
│       │   ├── renderLayer/
│       │   │   ├── BaseRenderLayer.ts
│       │   │   ├── LinkRenderLayer.ts
│       │   │   └── Types.ts
│       │   └── tsconfig.json
│       ├── test/
│       │   ├── WebglRenderer.test.ts
│       │   ├── playwright.config.ts
│       │   └── tsconfig.json
│       ├── tsconfig.json
│       ├── typings/
│       │   └── addon-webgl.d.ts
│       └── webpack.config.js
├── bin/
│   ├── agent/
│   │   └── setup-repo.mjs
│   ├── convert_svg_to_custom_glyph.js
│   ├── esbuild.mjs
│   ├── esbuild_all.mjs
│   ├── extract_vtfeatures.js
│   ├── lint_changes.js
│   ├── package_headless.js
│   ├── publish.js
│   ├── test_integration.js
│   ├── test_mousemodes.js
│   ├── test_unit.js
│   ├── update-website.sh
│   ├── vs_base_find_unused.js
│   └── vs_base_update.ps1
├── css/
│   └── xterm.css
├── demo/
│   ├── client/
│   │   ├── client.ts
│   │   ├── components/
│   │   │   ├── controlBar.ts
│   │   │   └── window/
│   │   │       ├── addonImageWindow.ts
│   │   │       ├── addonLigaturesWindow.ts
│   │   │       ├── addonProgressWindow.ts
│   │   │       ├── addonSearchWindow.ts
│   │   │       ├── addonSerializeWindow.ts
│   │   │       ├── addonWebFontsWindow.ts
│   │   │       ├── addonWebLinksWindow.ts
│   │   │       ├── addonsWindow.ts
│   │   │       ├── baseWindow.ts
│   │   │       ├── cellInspectorWindow.ts
│   │   │       ├── gpuWindow.ts
│   │   │       ├── optionsWindow.ts
│   │   │       ├── styleWindow.ts
│   │   │       ├── testWindow.ts
│   │   │       ├── vtWindow.ts
│   │   │       └── webglWindow.ts
│   │   ├── tsconfig.json
│   │   ├── types.ts
│   │   └── unicodeTable.ts
│   ├── fonts/
│   │   ├── bpdots.regular.otf
│   │   └── font-licenses.txt
│   ├── index.css
│   ├── index.html
│   ├── server/
│   │   ├── server.ts
│   │   └── tsconfig.json
│   ├── start.js
│   ├── test.html
│   └── tsconfig.json
├── eslint.config.mjs
├── eslint.config.typings.mjs
├── fixtures/
│   └── escape_sequence_files/
│       ├── NOTES
│       ├── run_tests.py
│       ├── t0001-all_printable.in
│       ├── t0001-all_printable.text
│       ├── t0002-history.in
│       ├── t0002-history.text
│       ├── t0002j-simple_string.in
│       ├── t0002j-simple_string.text
│       ├── t0003-line_wrap.in
│       ├── t0003-line_wrap.text
│       ├── t0003j-LF.in
│       ├── t0003j-LF.text
│       ├── t0004-LF.in
│       ├── t0004-LF.text
│       ├── t0004j-CR.in
│       ├── t0004j-CR.text
│       ├── t0005-CR.in
│       ├── t0005-CR.text
│       ├── t0006-IND.in
│       ├── t0006-IND.text
│       ├── t0007-space_at_end.in
│       ├── t0007-space_at_end.text
│       ├── t0008-BS.in
│       ├── t0008-BS.text
│       ├── t0009-NEL.in
│       ├── t0009-NEL.text
│       ├── t0010-RI.in
│       ├── t0010-RI.text
│       ├── t0011-RI_scroll.in
│       ├── t0011-RI_scroll.text
│       ├── t0012-VT.in
│       ├── t0012-VT.text
│       ├── t0013-FF.in
│       ├── t0013-FF.text
│       ├── t0014-CAN.in
│       ├── t0014-CAN.text
│       ├── t0015-SUB.in
│       ├── t0015-SUB.text
│       ├── t0016-SU.in
│       ├── t0016-SU.text
│       ├── t0017-SD.in
│       ├── t0017-SD.text
│       ├── t0020-CUF.in
│       ├── t0020-CUF.text
│       ├── t0021-CUB.in
│       ├── t0021-CUB.text
│       ├── t0022-CUU.in
│       ├── t0022-CUU.text
│       ├── t0023-CUU_scroll.in
│       ├── t0023-CUU_scroll.text
│       ├── t0024-CUD.in
│       ├── t0024-CUD.text
│       ├── t0025-CUP.in
│       ├── t0025-CUP.text
│       ├── t0026-CNL.in
│       ├── t0026-CNL.text
│       ├── t0027-CPL.in
│       ├── t0027-CPL.text
│       ├── t0030-HPR.in
│       ├── t0030-HPR.text
│       ├── t0031-HPB.in_
│       ├── t0031-HPB.text
│       ├── t0032-VPB.in
│       ├── t0032-VPB.text
│       ├── t0033-VPB_scroll.in
│       ├── t0033-VPB_scroll.text
│       ├── t0034-VPR.in
│       ├── t0034-VPR.text
│       ├── t0035-HVP.in
│       ├── t0035-HVP.text
│       ├── t0040-REP.in
│       ├── t0040-REP.text
│       ├── t0050-ICH.in
│       ├── t0050-ICH.text
│       ├── t0051-IL.in
│       ├── t0051-IL.text
│       ├── t0052-DL.in
│       ├── t0052-DL.text
│       ├── t0053-DCH.in
│       ├── t0053-DCH.text
│       ├── t0054-ECH.in
│       ├── t0054-ECH.text
│       ├── t0055-EL.in
│       ├── t0055-EL.text
│       ├── t0056-ED.in
│       ├── t0056-ED.text
│       ├── t0057-ED3.in
│       ├── t0057-ED3.note
│       ├── t0057-ED3.text
│       ├── t0060-DECSC.in
│       ├── t0060-DECSC.text
│       ├── t0061-CSI_s.in
│       ├── t0061-CSI_s.text
│       ├── t0070-DECSTBM_LF.in
│       ├── t0070-DECSTBM_LF.text
│       ├── t0071-DECSTBM_IND.in
│       ├── t0071-DECSTBM_IND.text
│       ├── t0072-DECSTBM_NEL.in
│       ├── t0072-DECSTBM_NEL.text
│       ├── t0073-DECSTBM_RI.in
│       ├── t0073-DECSTBM_RI.text
│       ├── t0074-DECSTBM_SU_SD.in
│       ├── t0074-DECSTBM_SU_SD.text
│       ├── t0075-DECSTBM_CUU_CUD.in
│       ├── t0075-DECSTBM_CUU_CUD.text
│       ├── t0076-DECSTBM_IL_DL.in
│       ├── t0076-DECSTBM_IL_DL.text
│       ├── t0077-DECSTBM_quirks.in
│       ├── t0077-DECSTBM_quirks.text
│       ├── t0078-DECSTBM_CPL_CNL.in
│       ├── t0078-DECSTBM_CPL_CNL.text
│       ├── t0079-DECSTBM_VPR.in
│       ├── t0079-DECSTBM_VPR.text
│       ├── t0080-HT.in
│       ├── t0080-HT.text
│       ├── t0081-TBC.in
│       ├── t0081-TBC.text
│       ├── t0082-HTS.in
│       ├── t0082-HTS.text
│       ├── t0083-CHT.in
│       ├── t0083-CHT.text
│       ├── t0084-CBT.in
│       ├── t0084-CBT.text
│       ├── t0084-CBT.text-xterm
│       ├── t0090-alt_screen.in
│       ├── t0090-alt_screen.text
│       ├── t0091-alt_screen_ED3.in
│       ├── t0091-alt_screen_ED3.text
│       ├── t0092-alt_screen_DECSC.in
│       ├── t0092-alt_screen_DECSC.text
│       ├── t0100-IRM.in
│       ├── t0100-IRM.text
│       ├── t0101-NLM.in
│       ├── t0101-NLM.text
│       ├── t0102-DECAWM.in
│       ├── t0102-DECAWM.text
│       ├── t0103-reverse_wrap.in
│       ├── t0103-reverse_wrap.text
│       ├── t0200-SGR.html
│       ├── t0200-SGR.in_
│       ├── t0220-SGR_inverse.html
│       ├── t0220-SGR_inverse.in_
│       ├── t0300-vttest1.in
│       ├── t0300-vttest1.text
│       ├── t0500-bash_long_line.in
│       ├── t0500-bash_long_line.text
│       ├── t0501-bash_ls.in
│       ├── t0501-bash_ls.text
│       ├── t0502-bash_ls_color.in
│       ├── t0502-bash_ls_color.text
│       ├── t0503-zsh_ls_color.in
│       ├── t0503-zsh_ls_color.text
│       ├── t0504-vim.in
│       ├── t0504-vim.text
│       ├── t600-DECSTBM_SR.in
│       ├── t600-DECSTBM_SR.text
│       ├── t601-DECSTBM_SL.in
│       ├── t601-DECSTBM_SL.text
│       ├── t602-DECSTBM_DECIC.in
│       ├── t602-DECSTBM_DECIC.text
│       ├── t603-DECSTBM_DECDC.in
│       └── t603-DECSTBM_DECDC.text
├── headless/
│   ├── .gitignore
│   ├── .npmignore
│   ├── README.md
│   └── package.json
├── images/
│   └── build-flow.tldr
├── package.json
├── src/
│   ├── browser/
│   │   ├── AccessibilityManager.ts
│   │   ├── Clipboard.test.ts
│   │   ├── Clipboard.ts
│   │   ├── ColorContrastCache.test.ts
│   │   ├── ColorContrastCache.ts
│   │   ├── CoreBrowserTerminal.ts
│   │   ├── Dom.ts
│   │   ├── Linkifier.test.ts
│   │   ├── Linkifier.ts
│   │   ├── LocalizableStrings.ts
│   │   ├── OscLinkProvider.ts
│   │   ├── RenderDebouncer.ts
│   │   ├── Terminal.test.ts
│   │   ├── Terminal2.test.ts
│   │   ├── TestUtils.test.ts
│   │   ├── TimeBasedDebouncer.ts
│   │   ├── Types.ts
│   │   ├── Viewport.ts
│   │   ├── decorations/
│   │   │   ├── BufferDecorationRenderer.ts
│   │   │   ├── ColorZoneStore.test.ts
│   │   │   ├── ColorZoneStore.ts
│   │   │   └── OverviewRulerRenderer.ts
│   │   ├── input/
│   │   │   ├── CompositionHelper.test.ts
│   │   │   ├── CompositionHelper.ts
│   │   │   ├── Mouse.test.ts
│   │   │   ├── Mouse.ts
│   │   │   ├── MoveToCell.test.ts
│   │   │   └── MoveToCell.ts
│   │   ├── public/
│   │   │   └── Terminal.ts
│   │   ├── renderer/
│   │   │   ├── dom/
│   │   │   │   ├── DomRenderer.ts
│   │   │   │   ├── DomRendererRowFactory.test.ts
│   │   │   │   ├── DomRendererRowFactory.ts
│   │   │   │   ├── WidthCache.test.ts
│   │   │   │   └── WidthCache.ts
│   │   │   └── shared/
│   │   │       ├── Constants.ts
│   │   │       ├── README.md
│   │   │       ├── RendererUtils.test.ts
│   │   │       ├── RendererUtils.ts
│   │   │       ├── SelectionRenderModel.ts
│   │   │       ├── TextBlinkStateManager.test.ts
│   │   │       ├── TextBlinkStateManager.ts
│   │   │       └── Types.ts
│   │   ├── scrollable/
│   │   │   ├── abstractScrollbar.ts
│   │   │   ├── fastDomNode.ts
│   │   │   ├── globalPointerMoveMonitor.ts
│   │   │   ├── horizontalScrollbar.ts
│   │   │   ├── mouseEvent.ts
│   │   │   ├── scrollable.ts
│   │   │   ├── scrollableElement.ts
│   │   │   ├── scrollableElementOptions.ts
│   │   │   ├── scrollbarArrow.ts
│   │   │   ├── scrollbarState.ts
│   │   │   ├── scrollbarVisibilityController.ts
│   │   │   ├── touch.ts
│   │   │   ├── verticalScrollbar.ts
│   │   │   └── widget.ts
│   │   ├── selection/
│   │   │   ├── SelectionModel.test.ts
│   │   │   ├── SelectionModel.ts
│   │   │   └── Types.ts
│   │   ├── services/
│   │   │   ├── CharSizeService.ts
│   │   │   ├── CharacterJoinerService.test.ts
│   │   │   ├── CharacterJoinerService.ts
│   │   │   ├── CoreBrowserService.ts
│   │   │   ├── KeyboardService.ts
│   │   │   ├── LinkProviderService.ts
│   │   │   ├── MouseCoordsService.ts
│   │   │   ├── MouseService.test.ts
│   │   │   ├── MouseService.ts
│   │   │   ├── RenderService.ts
│   │   │   ├── SelectionService.test.ts
│   │   │   ├── SelectionService.ts
│   │   │   ├── Services.ts
│   │   │   ├── ThemeService.test.ts
│   │   │   └── ThemeService.ts
│   │   ├── shared/
│   │   │   └── Constants.ts
│   │   └── tsconfig.json
│   ├── common/
│   │   ├── Async.ts
│   │   ├── CircularList.test.ts
│   │   ├── CircularList.ts
│   │   ├── Clone.test.ts
│   │   ├── Clone.ts
│   │   ├── Color.test.ts
│   │   ├── Color.ts
│   │   ├── CoreTerminal.ts
│   │   ├── Event.test.ts
│   │   ├── Event.ts
│   │   ├── InputHandler.test.ts
│   │   ├── InputHandler.ts
│   │   ├── Lifecycle.ts
│   │   ├── MultiKeyMap.test.ts
│   │   ├── MultiKeyMap.ts
│   │   ├── Platform.ts
│   │   ├── SortedList.test.ts
│   │   ├── SortedList.ts
│   │   ├── TaskQueue.ts
│   │   ├── TestUtils.test.ts
│   │   ├── Types.ts
│   │   ├── Version.ts
│   │   ├── WindowsMode.ts
│   │   ├── buffer/
│   │   │   ├── AttributeData.ts
│   │   │   ├── Buffer.test.ts
│   │   │   ├── Buffer.ts
│   │   │   ├── BufferLine.test.ts
│   │   │   ├── BufferLine.ts
│   │   │   ├── BufferRange.test.ts
│   │   │   ├── BufferRange.ts
│   │   │   ├── BufferReflow.test.ts
│   │   │   ├── BufferReflow.ts
│   │   │   ├── BufferSet.test.ts
│   │   │   ├── BufferSet.ts
│   │   │   ├── CellData.test.ts
│   │   │   ├── CellData.ts
│   │   │   ├── Constants.ts
│   │   │   ├── Marker.ts
│   │   │   └── Types.ts
│   │   ├── data/
│   │   │   ├── Charsets.ts
│   │   │   └── EscapeSequences.ts
│   │   ├── input/
│   │   │   ├── Keyboard.test.ts
│   │   │   ├── Keyboard.ts
│   │   │   ├── KittyKeyboard.test.ts
│   │   │   ├── KittyKeyboard.ts
│   │   │   ├── TextDecoder.test.ts
│   │   │   ├── TextDecoder.ts
│   │   │   ├── UnicodeV6.test.ts
│   │   │   ├── UnicodeV6.ts
│   │   │   ├── Win32InputMode.test.ts
│   │   │   ├── Win32InputMode.ts
│   │   │   ├── WriteBuffer.test.ts
│   │   │   ├── WriteBuffer.ts
│   │   │   ├── XParseColor.test.ts
│   │   │   └── XParseColor.ts
│   │   ├── parser/
│   │   │   ├── ApcParser.test.ts
│   │   │   ├── ApcParser.ts
│   │   │   ├── Constants.ts
│   │   │   ├── DcsParser.test.ts
│   │   │   ├── DcsParser.ts
│   │   │   ├── EscapeSequenceParser.test.ts
│   │   │   ├── EscapeSequenceParser.ts
│   │   │   ├── OscParser.test.ts
│   │   │   ├── OscParser.ts
│   │   │   ├── Params.test.ts
│   │   │   ├── Params.ts
│   │   │   └── Types.ts
│   │   ├── public/
│   │   │   ├── AddonManager.test.ts
│   │   │   ├── AddonManager.ts
│   │   │   ├── BufferApiView.ts
│   │   │   ├── BufferLineApiView.ts
│   │   │   ├── BufferNamespaceApi.ts
│   │   │   ├── ParserApi.ts
│   │   │   └── UnicodeApi.ts
│   │   ├── services/
│   │   │   ├── BufferService.ts
│   │   │   ├── CharsetService.ts
│   │   │   ├── CoreService.test.ts
│   │   │   ├── CoreService.ts
│   │   │   ├── DecorationService.test.ts
│   │   │   ├── DecorationService.ts
│   │   │   ├── InstantiationService.ts
│   │   │   ├── LogService.ts
│   │   │   ├── MouseStateService.test.ts
│   │   │   ├── MouseStateService.ts
│   │   │   ├── OptionsService.test.ts
│   │   │   ├── OptionsService.ts
│   │   │   ├── OscLinkService.test.ts
│   │   │   ├── OscLinkService.ts
│   │   │   ├── ServiceRegistry.ts
│   │   │   ├── Services.ts
│   │   │   ├── UnicodeService.test.ts
│   │   │   └── UnicodeService.ts
│   │   └── tsconfig.json
│   ├── headless/
│   │   ├── Terminal.ts
│   │   ├── public/
│   │   │   ├── Terminal.test.ts
│   │   │   └── Terminal.ts
│   │   └── tsconfig.json
│   ├── tsconfig-base.json
│   └── tsconfig-library-base.json
├── test/
│   ├── benchmark/
│   │   ├── EscapeSequenceParser.benchmark.ts
│   │   ├── Event.benchmark.ts
│   │   ├── Terminal.benchmark.ts
│   │   ├── benchmark.json
│   │   └── tsconfig.json
│   └── playwright/
│       ├── CharWidth.test.ts
│       ├── InputHandler.test.ts
│       ├── MouseTracking.test.ts
│       ├── Parser.test.ts
│       ├── Renderer.test.ts
│       ├── SharedRendererTests.ts
│       ├── Terminal.test.ts
│       ├── TestUtils.ts
│       ├── playwright.config.ts
│       └── tsconfig.json
├── tsconfig.all.json
├── typings/
│   ├── xterm-headless.d.ts
│   └── xterm.d.ts
├── webpack.config.headless.js
└── webpack.config.js
Download .txt
Showing preview only (314K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3490 symbols across 304 files)

FILE: addons/addon-attach/src/AttachAddon.ts
  type IAttachOptions (line 11) | interface IAttachOptions {
  class AttachAddon (line 15) | class AttachAddon implements ITerminalAddon, IAttachApi {
    method constructor (line 20) | constructor(socket: WebSocket, options?: IAttachOptions) {
    method activate (line 27) | public activate(terminal: Terminal): void {
    method dispose (line 44) | public dispose(): void {
    method _sendData (line 50) | private _sendData(data: string): void {
    method _sendBinary (line 57) | private _sendBinary(data: string): void {
    method _checkOpenSocket (line 68) | private _checkOpenSocket(): boolean {
  function addSocketListener (line 85) | function addSocketListener<K extends keyof WebSocketEventMap>(socket: We...

FILE: addons/addon-attach/typings/addon-attach.d.ts
  type IAttachOptions (line 9) | interface IAttachOptions {
  class AttachAddon (line 16) | class AttachAddon implements ITerminalAddon {

FILE: addons/addon-clipboard/src/ClipboardAddon.ts
  class ClipboardAddon (line 10) | class ClipboardAddon implements ITerminalAddon {
    method constructor (line 14) | constructor(
    method activate (line 19) | public activate(terminal: Terminal): void {
    method dispose (line 24) | public dispose(): void {
    method _readText (line 28) | private _readText(sel: ClipboardSelectionType, data: string): void {
    method _setOrReportClipboard (line 33) | private _setOrReportClipboard(data: string): boolean | Promise<boolean> {
  class BrowserClipboardProvider (line 72) | class BrowserClipboardProvider implements IClipboardProvider {
    method readText (line 73) | public async readText(selection: ClipboardSelectionType): Promise<stri...
    method writeText (line 80) | public async writeText(selection: ClipboardSelectionType, text: string...
  class Base64 (line 88) | class Base64 implements IBase64 {
    method encodeText (line 89) | public encodeText(data: string): string {
    method decodeText (line 92) | public decodeText(data: string): string {

FILE: addons/addon-clipboard/typings/addon-clipboard.d.ts
  class ClipboardAddon (line 13) | class ClipboardAddon implements ITerminalAddon {
  type ClipboardSelectionType (line 40) | const enum ClipboardSelectionType {
  type IBase64 (line 45) | interface IBase64 {
  class Base64 (line 63) | class Base64 implements IBase64 {
  type IClipboardProvider (line 78) | interface IClipboardProvider {
  class BrowserClipboardProvider (line 97) | class BrowserClipboardProvider implements IClipboardProvider{

FILE: addons/addon-fit/src/FitAddon.ts
  type ITerminalDimensions (line 10) | interface ITerminalDimensions {
  constant MINIMUM_COLS (line 22) | const MINIMUM_COLS = 2;
  constant MINIMUM_ROWS (line 23) | const MINIMUM_ROWS = 1;
  function getWindow (line 25) | function getWindow(e: Node): Window {
  function _getComputedStyle (line 32) | function _getComputedStyle(el: HTMLElement): CSSStyleDeclaration {
  class FitAddon (line 36) | class FitAddon implements ITerminalAddon, IFitApi {
    method activate (line 39) | public activate(terminal: Terminal): void {
    method dispose (line 43) | public dispose(): void {}
    method fit (line 45) | public fit(): void {
    method proposeDimensions (line 57) | public proposeDimensions(): ITerminalDimensions | undefined {

FILE: addons/addon-fit/test/FitAddon.test.ts
  function setDimensions (line 125) | async function setDimensions(width: number = 800, height: number = 450):...

FILE: addons/addon-fit/typings/addon-fit.d.ts
  class FitAddon (line 13) | class FitAddon implements ITerminalAddon {
  type ITerminalDimensions (line 44) | interface ITerminalDimensions {

FILE: addons/addon-image/fixture/growing_rect.js
  function createRect (line 4) | function createRect(size, color) {
  function createRectMinusOne (line 10) | function createRectMinusOne(size, color) {
  function main (line 23) | async function main() {

FILE: addons/addon-image/src/IIPHandler.ts
  type DecoderConst (line 14) | const enum DecoderConst {
  constant DEFAULT_HEADER (line 24) | const DEFAULT_HEADER: IHeaderFields = {
  class IIPHandler (line 34) | class IIPHandler implements IOscHandler, IResetHandler {
    method constructor (line 41) | constructor(
    method reset (line 52) | public reset(): void {}
    method start (line 54) | public start(): void {
    method put (line 61) | public put(data: Uint32Array, start: number, end: number): void {
    method end (line 90) | public end(success: boolean): boolean | Promise<boolean> {
    method _resize (line 146) | private _resize(w: number, h: number): [number, number] {
    method _dim (line 166) | private _dim(s: string, total: number, cdim: number): number {

FILE: addons/addon-image/src/IIPHeaderParser.test.ts
  constant CASES (line 10) | const CASES: [string, IHeaderFields][] = [
  function fromBs (line 41) | function fromBs(bs: string): Uint32Array {

FILE: addons/addon-image/src/IIPHeaderParser.ts
  type IHeaderFields (line 10) | interface IHeaderFields {
  type HeaderState (line 32) | const enum HeaderState {
  function toStr (line 43) | function toStr(data: Uint32Array): string {
  function toInt (line 52) | function toInt(data: Uint32Array): number {
  function toSize (line 64) | function toSize(data: Uint32Array): string {
  function toName (line 73) | function toName(data: Uint32Array): string {
  constant DECODERS (line 85) | const DECODERS: {[key: string]: (v: Uint32Array) => number | string} = {
  constant FILE_MARKER (line 95) | const FILE_MARKER = [70, 105, 108, 101];
  constant MAX_FIELDCHARS (line 96) | const MAX_FIELDCHARS = 1024;
  class HeaderParser (line 99) | class HeaderParser {
    method reset (line 106) | public reset(): void {
    method parse (line 114) | public parse(data: Uint32Array, start: number, end: number): number {
    method _a (line 160) | private _a(): number {
    method _storeKey (line 165) | private _storeKey(pos: number): boolean {
    method _storeValue (line 175) | private _storeValue(pos: number): boolean {

FILE: addons/addon-image/src/IIPImageStorage.ts
  class IIPImageStorage (line 14) | class IIPImageStorage {
    method constructor (line 15) | constructor(
    method addImage (line 23) | public addImage(img: HTMLCanvasElement | ImageBitmap): void {

FILE: addons/addon-image/src/IIPMetrics.test.ts
  constant TEST_IMAGES (line 14) | const TEST_IMAGES: [string, IMetrics][] = [

FILE: addons/addon-image/src/IIPMetrics.ts
  type ImageType (line 7) | type ImageType = 'image/png' | 'image/jpeg' | 'image/gif' | 'unsupported...
  type IMetrics (line 9) | interface IMetrics {
  constant UNSUPPORTED_TYPE (line 15) | const UNSUPPORTED_TYPE: IMetrics = {
  function imageType (line 21) | function imageType(d: Uint8Array): IMetrics {
  function jpgSize (line 51) | function jpgSize(d: Uint8Array): [number, number] {

FILE: addons/addon-image/src/ImageAddon.ts
  constant DEFAULT_OPTIONS (line 20) | const DEFAULT_OPTIONS: IImageAddonOptions = {
  constant MAX_SIXEL_PALETTE_SIZE (line 36) | const MAX_SIXEL_PALETTE_SIZE = 4096;
  type GaItem (line 39) | const enum GaItem {
  type GaAction (line 44) | const enum GaAction {
  type GaStatus (line 50) | const enum GaStatus {
  class ImageAddon (line 58) | class ImageAddon implements ITerminalAddon, IImageApi {
    method constructor (line 69) | constructor(opts?: Partial<IImageAddonOptions>) {
    method dispose (line 74) | public dispose(): void {
    method _disposeLater (line 83) | private _disposeLater(...args: IDisposable[]): void {
    method activate (line 89) | public activate(terminal: ITerminalExt): void {
    method reset (line 175) | public reset(): boolean {
    method storageLimit (line 188) | public get storageLimit(): number {
    method storageLimit (line 192) | public set storageLimit(limit: number) {
    method storageUsage (line 197) | public get storageUsage(): number {
    method showPlaceholder (line 204) | public get showPlaceholder(): boolean {
    method showPlaceholder (line 208) | public set showPlaceholder(value: boolean) {
    method getImageAtBufferCell (line 213) | public getImageAtBufferCell(x: number, y: number): HTMLCanvasElement |...
    method extractTileAtBufferCell (line 217) | public extractTileAtBufferCell(x: number, y: number): HTMLCanvasElemen...
    method _report (line 221) | private _report(s: string): void {
    method _decset (line 225) | private _decset(params: (number | number[])[]): boolean {
    method _decrst (line 236) | private _decrst(params: (number | number[])[]): boolean {
    method _da1 (line 248) | private _da1(params: (number | number[])[]): boolean {
    method _xtermGraphicsAttributes (line 274) | private _xtermGraphicsAttributes(params: (number | number[])[]): boole...

FILE: addons/addon-image/src/ImageRenderer.ts
  constant PLACEHOLDER_LENGTH (line 11) | const PLACEHOLDER_LENGTH = 4096;
  constant PLACEHOLDER_HEIGHT (line 12) | const PLACEHOLDER_HEIGHT = 24;
  class ImageRenderer (line 20) | class ImageRenderer extends Disposable implements IDisposable {
    method canvas (line 22) | public get canvas(): HTMLCanvasElement | undefined { return this._laye...
    method createCanvas (line 32) | public static createCanvas(localDocument: Document | undefined, width:...
    method createImageData (line 49) | public static createImageData(ctx: CanvasRenderingContext2D, width: nu...
    method createImageBitmap (line 63) | public static createImageBitmap(img: ImageBitmapSource): Promise<Image...
    method constructor (line 71) | constructor(private _terminal: ITerminalExt) {
    method showPlaceholder (line 110) | public showPlaceholder(value: boolean): void {
    method dimensions (line 127) | public get dimensions(): IRenderDimensions | undefined {
    method cellSize (line 134) | public get cellSize(): ICellSize {
    method clearLines (line 144) | public clearLines(start: number, end: number, layer?: ImageLayer): void {
    method clearAll (line 159) | public clearAll(layer?: ImageLayer): void {
    method draw (line 173) | public draw(imgSpec: IImageSpec, tileId: number, col: number, row: num...
    method extractTile (line 212) | public extractTile(imgSpec: IImageSpec, tileId: number): HTMLCanvasEle...
    method drawPlaceholder (line 241) | public drawPlaceholder(col: number, row: number, count: number = 1): v...
    method rescaleCanvas (line 275) | public rescaleCanvas(): void {
    method _rescaleImage (line 289) | private _rescaleImage(spec: IImageSpec, currentWidth: number, currentH...
    method _open (line 317) | private _open(): void {
    method insertLayerToDom (line 328) | public insertLayerToDom(layer: ImageLayer = 'top'): void {
    method removeLayerFromDom (line 370) | public removeLayerFromDom(layer: ImageLayer = 'top'): void {
    method hasLayer (line 378) | public hasLayer(layer: ImageLayer): boolean {
    method _createPlaceHolder (line 382) | private _createPlaceHolder(height: number = PLACEHOLDER_HEIGHT): void {
    method document (line 419) | public get document(): Document | undefined {

FILE: addons/addon-image/src/ImageStorage.ts
  constant CELL_SIZE_DEFAULT (line 12) | const CELL_SIZE_DEFAULT: ICellSize = {
  class ExtendedAttrsImage (line 23) | class ExtendedAttrsImage implements IExtendedAttrsImage {
    method ext (line 25) | public get ext(): number {
    method ext (line 34) | public set ext(value: number) { this._ext = value; }
    method underlineStyle (line 36) | public get underlineStyle(): UnderlineStyle {
    method underlineStyle (line 43) | public set underlineStyle(value: UnderlineStyle) {
    method underlineColor (line 48) | public get underlineColor(): number {
    method underlineColor (line 51) | public set underlineColor(value: number) {
    method underlineVariantOffset (line 56) | public get underlineVariantOffset(): number {
    method underlineVariantOffset (line 63) | public set underlineVariantOffset(value: number) {
    method urlId (line 69) | public get urlId(): number {
    method urlId (line 72) | public set urlId(value: number) {
    method constructor (line 76) | constructor(
    method clone (line 86) | public clone(): IExtendedAttrsImage {
    method isEmpty (line 98) | public isEmpty(): boolean {
  constant EMPTY_ATTRS (line 102) | const EMPTY_ATTRS = new ExtendedAttrsImage();
  class ImageStorage (line 112) | class ImageStorage implements IDisposable {
    method constructor (line 130) | constructor(
    method dispose (line 149) | public dispose(): void {
    method reset (line 153) | public reset(): void {
    method getLimit (line 163) | public getLimit(): number {
    method setLimit (line 167) | public setLimit(value: number): void {
    method getUsage (line 175) | public getUsage(): number {
    method _getStoredPixels (line 179) | private _getStoredPixels(): number {
    method _delImg (line 192) | private _delImg(id: number): void {
    method wipeAlternate (line 206) | public wipeAlternate(): void {
    method deleteImage (line 227) | public deleteImage(id: number): void {
    method addImage (line 244) | public addImage(img: HTMLCanvasElement | ImageBitmap, scrolling: boole...
    method render (line 350) | public render(range: { start: number, end: number }): void {
    method viewportResize (line 488) | public viewportResize(metrics: { cols: number, rows: number }): void {
    method getImageAtBufferCell (line 550) | public getImageAtBufferCell(x: number, y: number): HTMLCanvasElement |...
    method extractTileAtBufferCell (line 570) | public extractTileAtBufferCell(x: number, y: number): HTMLCanvasElemen...
    method _evictOldest (line 586) | private _evictOldest(room: number): number {
    method _writeToCell (line 603) | private _writeToCell(line: IBufferLineExt, x: number, imageId: number,...
    method _evictOnAlternate (line 630) | private _evictOnAlternate(): void {

FILE: addons/addon-image/src/SixelHandler.ts
  constant MEM_PERMA_LIMIT (line 15) | const MEM_PERMA_LIMIT = 4194304;
  constant DEFAULT_PALETTE (line 18) | const DEFAULT_PALETTE = PALETTE_ANSI_256;
  class SixelHandler (line 22) | class SixelHandler implements IDcsHandler, IResetHandler {
    method constructor (line 27) | constructor(
    method reset (line 39) | public reset(): void {
    method hook (line 54) | public hook(params: IParams): void {
    method put (line 65) | public put(data: Uint32Array, start: number, end: number): void {
    method unhook (line 85) | public unhook(success: boolean): boolean | Promise<boolean> {
  function extractActiveBg (line 118) | function extractActiveBg(attr: AttributeData, colors: ReadonlyColorSet |...
  function convertLe (line 148) | function convertLe(color: number): RGBA8888 {

FILE: addons/addon-image/src/SixelImageStorage.ts
  class SixelImageStorage (line 17) | class SixelImageStorage {
    method constructor (line 18) | constructor(
    method addImage (line 29) | public addImage(img: HTMLCanvasElement | ImageBitmap): void {
    method advanceCursor (line 38) | public advanceCursor(height: number): void {

FILE: addons/addon-image/src/Types.ts
  type Cell (line 17) | const enum Cell {
  type IImageAddonOptions (line 30) | interface IImageAddonOptions {
  type IResetHandler (line 45) | interface IResetHandler {
  type IExtendedAttrsImage (line 58) | interface IExtendedAttrsImage extends IExtendedAttrs {
  type IBufferLineExt (line 65) | interface IBufferLineExt extends IBufferLine {
  type IInputHandlerExt (line 70) | interface IInputHandlerExt extends IInputHandler {
  type ICoreTerminalExt (line 81) | interface ICoreTerminalExt extends ITerminal {
  type ITerminalExt (line 88) | interface ITerminalExt extends Terminal {
  type ICellSize (line 97) | interface ICellSize {
  type ImageLayer (line 102) | type ImageLayer = 'top' | 'bottom';
  type IImageSpec (line 104) | interface IImageSpec {

FILE: addons/addon-image/src/kitty/KittyGraphicsHandler.ts
  constant DECODER_KEEP_DATA (line 26) | const DECODER_KEEP_DATA = 4194304;
  constant DECODER_INITIAL_DATA (line 27) | const DECODER_INITIAL_DATA = 4194304;
  constant DECODER_OK (line 30) | const DECODER_OK: DecodeStatus.OK = 0;
  constant MAX_CONTROL_DATA_SIZE (line 33) | const MAX_CONTROL_DATA_SIZE = 512;
  constant SEMICOLON (line 36) | const SEMICOLON = 0x3B;
  class KittyGraphicsHandler (line 39) | class KittyGraphicsHandler implements IApcHandler, IResetHandler, IDispo...
    method constructor (line 71) | constructor(
    method reset (line 83) | public reset(): void {
    method dispose (line 92) | public dispose(): void {
    method _removePendingEntry (line 96) | private _removePendingEntry(key: number): void {
    method _cleanupAllPending (line 103) | private _cleanupAllPending(): void {
    method start (line 111) | public start(): void {
    method put (line 123) | public put(data: Uint32Array, start: number, end: number): void {
    method _streamPayload (line 174) | private _streamPayload(data: Uint32Array, start: number, end: number):...
    method end (line 218) | public end(success: boolean): boolean | Promise<boolean> {
    method _parseControlDataString (line 301) | private _parseControlDataString(): string {
    method _handleNoPayloadCommand (line 309) | private _handleNoPayloadCommand(): boolean | Promise<boolean> {
    method _handleCommandWithBytesAndCmd (line 340) | private _handleCommandWithBytesAndCmd(cmd: IKittyCommand, bytes: Uint8...
    method _handlePlacement (line 376) | private _handlePlacement(cmd: IKittyCommand): boolean | Promise<boolea...
    method _handleTransmit (line 393) | private _handleTransmit(cmd: IKittyCommand, bytes: Uint8Array, decodeE...
    method _handleTransmitDisplay (line 424) | private _handleTransmitDisplay(cmd: IKittyCommand, bytes: Uint8Array, ...
    method _handleQuery (line 449) | private _handleQuery(cmd: IKittyCommand, bytes: Uint8Array, decodeErro...
    method _handleDelete (line 500) | private _handleDelete(cmd: IKittyCommand): boolean {
    method _sendResponse (line 535) | private _sendResponse(id: number, message: string, quiet: number, plac...
    method _displayImage (line 547) | private _displayImage(image: IKittyImageData, cmd: IKittyCommand): Pro...
    method _decodeAndDisplay (line 553) | private async _decodeAndDisplay(image: IKittyImageData, cmd: IKittyCom...
    method _createBitmap (line 689) | private async _createBitmap(image: IKittyImageData): Promise<ImageBitm...
    method _decompressZlib (line 776) | private async _decompressZlib(compressed: Uint8Array): Promise<Uint8Ar...
    method _decompress (line 784) | private async _decompress(compressed: Uint8Array, format: 'deflate' | ...
    method images (line 809) | public get images(): ReadonlyMap<number, IKittyImageData> {
    method _kittyIdToStorageId (line 813) | public get _kittyIdToStorageId(): ReadonlyMap<number, number> {
    method pendingTransmissions (line 817) | public get pendingTransmissions(): ReadonlyMap<number, IPendingTransmi...

FILE: addons/addon-image/src/kitty/KittyGraphicsTypes.ts
  type KittyAction (line 12) | const enum KittyAction {
  type KittyFormat (line 22) | const enum KittyFormat {
  type KittyCompression (line 30) | const enum KittyCompression {
  type KittyKey (line 37) | const enum KittyKey {
  constant BYTES_PER_PIXEL_RGB (line 85) | const BYTES_PER_PIXEL_RGB = 3;
  constant BYTES_PER_PIXEL_RGBA (line 86) | const BYTES_PER_PIXEL_RGBA = 4;
  constant ALPHA_OPAQUE (line 87) | const ALPHA_OPAQUE = 255;
  type IKittyCommand (line 90) | interface IKittyCommand {
  type IPendingTransmission (line 118) | interface IPendingTransmission {
  type IKittyImageData (line 130) | interface IKittyImageData {
  function parseKittyCommand (line 141) | function parseKittyCommand(data: string): IKittyCommand {

FILE: addons/addon-image/src/kitty/KittyImageStorage.ts
  class KittyImageStorage (line 18) | class KittyImageStorage implements IDisposable {
    method constructor (line 46) | constructor(
    method reset (line 57) | public reset(): void {
    method dispose (line 64) | public dispose(): void {
    method storeImage (line 71) | public storeImage(id: number | undefined, imageData: Omit<IKittyImageD...
    method addImage (line 92) | public addImage(kittyId: number, image: HTMLCanvasElement | ImageBitma...
    method getImage (line 106) | public getImage(kittyId: number): IKittyImageData | undefined {
    method deleteById (line 110) | public deleteById(kittyId: number): void {
    method deleteAll (line 120) | public deleteAll(): void {
    method images (line 129) | public get images(): ReadonlyMap<number, IKittyImageData> {
    method kittyIdToStorageId (line 133) | public get kittyIdToStorageId(): ReadonlyMap<number, number> {
    method lastImageId (line 137) | public get lastImageId(): number {
    method _evictUndisplayedImages (line 141) | private _evictUndisplayedImages(): void {

FILE: addons/addon-image/test/ImageAddon.test.ts
  type IImageAddonOptions (line 15) | interface IImageAddonOptions {
  type ITestData (line 35) | interface ITestData {
  type IDimensions (line 43) | interface IDimensions {
  constant TESTDATA (line 51) | const TESTDATA: ITestData = (() => {
  constant SIXEL_SEQ_0 (line 65) | const SIXEL_SEQ_0 = introducer(0) + TESTDATA.sixel + FINALIZER;
  constant TESTDATA_IIP (line 70) | const TESTDATA_IIP: [string, [number, number]][] = [
  function getDimensions (line 320) | async function getDimensions(): Promise<IDimensions> {
  function getCursor (line 330) | async function getCursor(): Promise<[number, number]> {
  function getImageStorageLength (line 334) | async function getImageStorageLength(): Promise<number> {
  function getScrollbackPlusRows (line 338) | async function getScrollbackPlusRows(): Promise<number> {
  function getOrigSize (line 342) | async function getOrigSize(id: number): Promise<[number, number]> {

FILE: addons/addon-image/test/KittyGraphics.test.ts
  type IImageAddonOptions (line 14) | interface IImageAddonOptions {
  type IDimensions (line 34) | interface IDimensions {
  constant KITTY_BLACK_1X1_BASE64 (line 42) | const KITTY_BLACK_1X1_BASE64 = readFileSync('./addons/addon-image/fixtur...
  constant KITTY_BLACK_1X1_BYTES (line 43) | const KITTY_BLACK_1X1_BYTES = Array.from(readFileSync('./addons/addon-im...
  constant KITTY_RGB_3X1_BASE64 (line 44) | const KITTY_RGB_3X1_BASE64 = readFileSync('./addons/addon-image/fixture/...
  constant KITTY_MULTICOLOR_200X100_BASE64 (line 45) | const KITTY_MULTICOLOR_200X100_BASE64 = readFileSync('./addons/addon-ima...
  constant KITTY_MULTICOLOR_200X100_BYTES (line 46) | const KITTY_MULTICOLOR_200X100_BYTES = Array.from(readFileSync('./addons...
  constant RAW_RGB_1X1_BLACK (line 49) | const RAW_RGB_1X1_BLACK = Buffer.from([0, 0, 0]).toString('base64');
  constant RAW_RGB_1X1_RED (line 50) | const RAW_RGB_1X1_RED = Buffer.from([255, 0, 0]).toString('base64');
  constant RAW_RGB_3X1 (line 51) | const RAW_RGB_3X1 = Buffer.from([
  constant RAW_RGB_2X2 (line 56) | const RAW_RGB_2X2 = Buffer.from([
  constant RAW_RGB_5X1 (line 61) | const RAW_RGB_5X1 = Buffer.from([
  constant RAW_RGB_4X2 (line 69) | const RAW_RGB_4X2 = Buffer.from([
  constant RAW_RGBA_1X1_WHITE (line 75) | const RAW_RGBA_1X1_WHITE = Buffer.from([255, 255, 255, 255]).toString('b...
  constant RAW_RGBA_1X1_RED (line 76) | const RAW_RGBA_1X1_RED = Buffer.from([255, 0, 0, 255]).toString('base64');
  constant RAW_RGBA_1X1_TRANSPARENT (line 77) | const RAW_RGBA_1X1_TRANSPARENT = Buffer.from([0, 0, 0, 0]).toString('bas...
  constant RAW_RGBA_3X1 (line 78) | const RAW_RGBA_3X1 = Buffer.from([
  constant RAW_RGBA_2X2 (line 83) | const RAW_RGBA_2X2 = Buffer.from([
  constant RAW_RGBA_5X1 (line 88) | const RAW_RGBA_5X1 = Buffer.from([
  function getDimensions (line 2180) | async function getDimensions(): Promise<IDimensions> {
  function getCursor (line 2190) | async function getCursor(): Promise<[number, number]> {
  function getImageStorageLength (line 2194) | async function getImageStorageLength(): Promise<number> {
  function getOrigSize (line 2198) | async function getOrigSize(id: number): Promise<[number, number]> {
  function getPixel (line 2205) | async function getPixel(col: number, row: number, x: number, y: number):...
  function getPixels (line 2215) | async function getPixels(col: number, row: number, x: number, y: number,...

FILE: addons/addon-image/typings/addon-image.d.ts
  type IImageAddonOptions (line 9) | interface IImageAddonOptions {
  class ImageAddon (line 90) | class ImageAddon implements ITerminalAddon {

FILE: addons/addon-ligatures/src/LigaturesAddon.ts
  type ITerminalAddon (line 11) | interface ITerminalAddon {
  class LigaturesAddon (line 16) | class LigaturesAddon implements ITerminalAddon, ILigaturesApi {
    method constructor (line 23) | constructor(options?: Partial<ILigatureOptions>) {
    method activate (line 36) | public activate(terminal: Terminal): void {
    method dispose (line 45) | public dispose(): void {

FILE: addons/addon-ligatures/src/Types.ts
  type ILigatureOptions (line 6) | interface ILigatureOptions {

FILE: addons/addon-ligatures/src/font.ts
  type IFontMetadata (line 10) | interface IFontMetadata {
  type IFontAccessNavigator (line 17) | interface IFontAccessNavigator {
  function load (line 34) | async function load(fontFamily: string, cacheSize: number): Promise<Font...

FILE: addons/addon-ligatures/src/fontLigatures/flatten.ts
  function flatten (line 3) | function flatten(tree: ILookupTree, visited: Map<ILookupTreeEntry, IFlat...
  function flattenEntry (line 19) | function flattenEntry(entry: ILookupTreeEntry, visited: Map<ILookupTreeE...

FILE: addons/addon-ligatures/src/fontLigatures/index.test.ts
  type IFont (line 11) | interface IFont {
  type ITestCase (line 16) | interface ITestCase {
  function loadFont (line 272) | function loadFont(fontName: string): IFont {

FILE: addons/addon-ligatures/src/fontLigatures/index.ts
  class FontImpl (line 15) | class FontImpl implements IFont {
    method constructor (line 21) | constructor(font: opentype.Font, options: Required<IOptions>) {
    method findLigatures (line 80) | public findLigatures(text: string): ILigatureData {
    method findLigatureRanges (line 115) | public findLigatureRanges(text: string): [number, number][] {
    method _findInternal (line 140) | private _findInternal(sequence: number[]): { sequence: number[], range...
    method _getNextLookup (line 210) | private _getNextLookup(sequence: number[], start: number): { index: nu...
  function loadBuffer (line 254) | function loadBuffer(buffer: ArrayBuffer, options?: IOptions): IFont {

FILE: addons/addon-ligatures/src/fontLigatures/merge.test.ts
  type ILookupResult (line 9) | interface ILookupResult {
  function lookup (line 17) | function lookup(substitutionGlyph: number, index?: number, subIndex?: nu...

FILE: addons/addon-ligatures/src/fontLigatures/merge.ts
  function mergeTrees (line 11) | function mergeTrees(trees: ILookupTree[]): ILookupTree {
  function mergeSubtree (line 32) | function mergeSubtree(mainTree: ILookupTree, mergeTree: ILookupTree, mer...
  function mergeTreeEntry (line 198) | function mergeTreeEntry(mainTree: ILookupTreeEntry, mergeTree: ILookupTr...
  type IOverlap (line 237) | interface IOverlap {
  function getRangeOverlap (line 250) | function getRangeOverlap(first: [number, number], second: [number, numbe...
  function getIndividualOverlap (line 297) | function getIndividualOverlap(first: number, second: [number, number]): ...
  function rangeOrIndividual (line 331) | function rangeOrIndividual(start: number, end: number): number | [number...
  function cloneEntry (line 345) | function cloneEntry(entry: ILookupTreeEntry, visited: Map<ILookupTreeEnt...
  function cloneTree (line 380) | function cloneTree(tree: ILookupTree, visited: Map<ILookupTreeEntry, ILo...

FILE: addons/addon-ligatures/src/fontLigatures/mergeRange.ts
  function mergeRange (line 10) | function mergeRange(ranges: [number, number][], newRangeStart: number, n...

FILE: addons/addon-ligatures/src/fontLigatures/processors/6-1.ts
  function buildTree (line 15) | function buildTree(table: ChainingContextualSubstitutionTable.IFormat1, ...

FILE: addons/addon-ligatures/src/fontLigatures/processors/6-2.ts
  function buildTree (line 17) | function buildTree(table: ChainingContextualSubstitutionTable.IFormat2, ...

FILE: addons/addon-ligatures/src/fontLigatures/processors/6-3.ts
  function buildTree (line 15) | function buildTree(table: ChainingContextualSubstitutionTable.IFormat3, ...

FILE: addons/addon-ligatures/src/fontLigatures/processors/8-1.ts
  function buildTree (line 14) | function buildTree(table: IReverseChainingContextualSingleSubstitutionTa...

FILE: addons/addon-ligatures/src/fontLigatures/processors/classDef.ts
  function getGlyphClass (line 10) | function getGlyphClass(table: ClassDefTable, glyphId: number | [number, ...
  function getRangeGlyphClass (line 27) | function getRangeGlyphClass(table: ClassDefTable.IFormat2, glyphId: [num...
  function getIndividualGlyphClass (line 55) | function getIndividualGlyphClass(table: ClassDefTable.IFormat2, glyphId:...
  function listClassGlyphs (line 65) | function listClassGlyphs(table: ClassDefTable, index: number): (number |...

FILE: addons/addon-ligatures/src/fontLigatures/processors/coverage.ts
  function getCoverageGlyphIndex (line 10) | function getCoverageGlyphIndex(table: CoverageTable, glyphId: number): n...
  function listGlyphsByIndex (line 28) | function listGlyphsByIndex(table: CoverageTable): { glyphId: number | [n...

FILE: addons/addon-ligatures/src/fontLigatures/processors/helper.ts
  type IEntryMeta (line 6) | interface IEntryMeta {
  function processInputPosition (line 11) | function processInputPosition(
  function processLookaheadPosition (line 41) | function processLookaheadPosition(
  function processBacktrackPosition (line 84) | function processBacktrackPosition(
  function getInputTree (line 127) | function getInputTree(tree: ILookupTree, substitutions: ISubstitutionLoo...
  function getSubstitutionAtPositionRange (line 151) | function getSubstitutionAtPositionRange(substitutions: ISubstitutionLook...
  function getSubstitutionAtPosition (line 168) | function getSubstitutionAtPosition(substitutions: ISubstitutionLookupRec...

FILE: addons/addon-ligatures/src/fontLigatures/processors/substitution.ts
  function getRangeSubstitutionGlyphs (line 12) | function getRangeSubstitutionGlyphs(table: SubstitutionTable, glyphId: [...
  function getIndividualSubstitutionGlyph (line 41) | function getIndividualSubstitutionGlyph(table: SubstitutionTable, glyphI...

FILE: addons/addon-ligatures/src/fontLigatures/tables.ts
  type SubstitutionTable (line 1) | type SubstitutionTable = SubstitutionTable.IFormat1 | SubstitutionTable....
  type IFormat1 (line 3) | interface IFormat1 {
  type IFormat2 (line 9) | interface IFormat2 {
  type CoverageTable (line 16) | type CoverageTable = CoverageTable.IFormat1 | CoverageTable.IFormat2;
  type IFormat1 (line 18) | interface IFormat1 {
  type IFormat2 (line 23) | interface IFormat2 {
  type ChainingContextualSubstitutionTable (line 33) | type ChainingContextualSubstitutionTable = ChainingContextualSubstitutio...
  type IFormat1 (line 36) | interface IFormat1 {
  type IFormat2 (line 42) | interface IFormat2 {
  type IFormat3 (line 51) | interface IFormat3 {
  type IReverseChainingContextualSingleSubstitutionTable (line 60) | interface IReverseChainingContextualSingleSubstitutionTable {
  type ClassDefTable (line 68) | type ClassDefTable = ClassDefTable.IFormat2;
  type IFormat2 (line 70) | interface IFormat2 {
  type ISubstitutionLookupRecord (line 80) | interface ISubstitutionLookupRecord {
  type ChainSubRuleTable (line 85) | type ChainSubRuleTable = IChainSubClassRuleTable;
  type IChainSubClassRuleTable (line 86) | interface IChainSubClassRuleTable {
  type Lookup (line 93) | type Lookup = Lookup.IType1 | Lookup.IType6 | Lookup.IType8;
  type IType1 (line 95) | interface IType1 {
  type IType6 (line 101) | interface IType6 {
  type IType8 (line 107) | interface IType8 {

FILE: addons/addon-ligatures/src/fontLigatures/types.ts
  type ISubstitutionResult (line 1) | interface ISubstitutionResult {
  type ILigatureData (line 9) | interface ILigatureData {
  type IFont (line 28) | interface IFont {
  type IOptions (line 46) | interface IOptions {
  type ILookupTree (line 54) | interface ILookupTree {
  type ILookupTreeEntry (line 64) | interface ILookupTreeEntry {
  type ILookupResult (line 70) | interface ILookupResult {
  type IFlattenedLookupTree (line 78) | interface IFlattenedLookupTree {
  type IFlattenedLookupTreeEntry (line 82) | interface IFlattenedLookupTreeEntry {

FILE: addons/addon-ligatures/src/fontLigatures/walk.ts
  function walkTree (line 3) | function walkTree(tree: IFlattenedLookupTree, sequence: number[], startI...
  function walkReverse (line 48) | function walkReverse(tree: IFlattenedLookupTree, sequence: number[], ind...

FILE: addons/addon-ligatures/src/index.ts
  type LoadingState (line 11) | const enum LoadingState {
  constant CACHE_SIZE (line 20) | const CACHE_SIZE = 100000;
  function enableLigatures (line 29) | function enableLigatures(term: Terminal, fallbackLigatures: string[] = [...
  function getFallbackRanges (line 87) | function getFallbackRanges(text: string, fallbackLigatures: string[]): [...

FILE: addons/addon-ligatures/src/parse.ts
  type IParseContext (line 6) | interface IParseContext {
  function parse (line 17) | function parse(family: string): string[] {
  function parseString (line 65) | function parseString(context: IParseContext, quoteChar: '\'' | '"'): str...
  function parseIdentifier (line 104) | function parseIdentifier(context: IParseContext): string {
  function parseUnicode (line 150) | function parseUnicode(context: IParseContext): string {
  function unicodeToString (line 178) | function unicodeToString(codePoint: string): string {

FILE: addons/addon-ligatures/test/LigaturesAddon.test.ts
  class MockTerminal (line 111) | class MockTerminal {
    method constructor (line 119) | constructor(onRefresh: (start: number, end: number) => void) {
    method registerCharacterJoiner (line 123) | public registerCharacterJoiner(handler: (text: string) => [number, num...
    method deregisterCharacterJoiner (line 127) | public deregisterCharacterJoiner(id: number): void {
    method options (line 130) | public get options(): { [name: string]: string | number } { return thi...
    method options (line 131) | public set options(options: { [name: string]: string | number }) {
  function delay (line 138) | function delay(delayMs: number): Promise<void> {

FILE: addons/addon-ligatures/typings/addon-ligatures.d.ts
  class LigaturesAddon (line 17) | class LigaturesAddon implements ITerminalAddon {
  type ILigatureOptions (line 44) | interface ILigatureOptions {

FILE: addons/addon-progress/src/ProgressAddon.ts
  type ProgressType (line 11) | const enum ProgressType {
  function toInt (line 23) | function toInt(s: string): number {
  class ProgressAddon (line 36) | class ProgressAddon implements ITerminalAddon, IProgressApi {
    method dispose (line 44) | public dispose(): void {
    method activate (line 49) | public activate(terminal: Terminal): void {
    method progress (line 89) | public get progress(): IProgressState {
    method progress (line 93) | public set progress(progress: IProgressState) {

FILE: addons/addon-progress/typings/addon-progress.d.ts
  class ProgressAddon (line 13) | class ProgressAddon implements ITerminalAddon, IDisposable {
  type IProgressState (line 47) | interface IProgressState {

FILE: addons/addon-search/src/DecorationManager.ts
  type IHighlight (line 14) | interface IHighlight extends IDisposable {
  type IMultiHighlight (line 22) | interface IMultiHighlight extends IDisposable {
  class DecorationManager (line 31) | class DecorationManager extends Disposable {
    method constructor (line 35) | constructor(private readonly _terminal: Terminal) {
    method createHighlightDecorations (line 45) | public createHighlightDecorations(results: ISearchResult[], options: I...
    method createActiveDecoration (line 64) | public createActiveDecoration(result: ISearchResult, options: ISearchD...
    method clearHighlightDecorations (line 75) | public clearHighlightDecorations(): void {
    method _storeDecoration (line 86) | private _storeDecoration(decoration: IDecoration, match: ISearchResult...
    method _applyStyles (line 97) | private _applyStyles(element: HTMLElement, borderColor: string | undef...
    method _createResultDecorations (line 116) | private _createResultDecorations(result: ISearchResult, options: ISear...

FILE: addons/addon-search/src/SearchAddon.ts
  type IInternalSearchOptions (line 17) | interface IInternalSearchOptions {
  type Constants (line 24) | const enum Constants {
  class SearchAddon (line 33) | class SearchAddon extends Disposable implements ITerminalAddon, ISearchA...
    method onDidChangeResults (line 50) | public get onDidChangeResults(): IEvent<ISearchResultChangeEvent> {
    method constructor (line 54) | constructor(options?: Partial<ISearchAddonOptions>) {
    method activate (line 60) | public activate(terminal: Terminal): void {
    method _updateMatches (line 70) | private _updateMatches(): void {
    method clearDecorations (line 81) | public clearDecorations(retainCachedSearchTerm?: boolean): void {
    method clearActiveDecoration (line 90) | public clearActiveDecoration(): void {
    method findNext (line 101) | public findNext(term: string, searchOptions?: ISearchOptions, internal...
    method _highlightAllMatches (line 123) | private _highlightAllMatches(term: string, searchOptions: ISearchOptio...
    method _findNextAndSelect (line 159) | private _findNextAndSelect(term: string, searchOptions?: ISearchOption...
    method findPrevious (line 180) | public findPrevious(term: string, searchOptions?: ISearchOptions, inte...
    method _fireResults (line 202) | private _fireResults(searchOptions?: ISearchOptions): void {
    method _findPreviousAndSelect (line 206) | private _findPreviousAndSelect(term: string, searchOptions?: ISearchOp...
    method _selectResult (line 225) | private _selectResult(result: ISearchResult | undefined, options?: ISe...

FILE: addons/addon-search/src/SearchEngine.test.ts
  function writeP (line 12) | function writeP(terminal: Terminal, data: string): Promise<void> {

FILE: addons/addon-search/src/SearchEngine.ts
  type ISearchPosition (line 13) | interface ISearchPosition {
  type ISearchResult (line 21) | interface ISearchResult {
  type Constants (line 31) | const enum Constants {
  class SearchEngine (line 44) | class SearchEngine {
    method constructor (line 45) | constructor(
    method find (line 58) | public find(term: string, startRow: number, startCol: number, searchOp...
    method findNextWithSelection (line 97) | public findNextWithSelection(term: string, searchOptions?: ISearchOpti...
    method findPreviousWithSelection (line 167) | public findPreviousWithSelection(term: string, searchOptions?: ISearch...
    method _isWholeWord (line 235) | private _isWholeWord(searchIndex: number, line: string, term: string):...
    method _findInLine (line 252) | private _findInLine(term: string, searchPosition: ISearchPosition, sea...
    method _stringLengthToBufferSize (line 343) | private _stringLengthToBufferSize(row: number, offset: number): number {
    method _bufferColsToStringOffset (line 368) | private _bufferColsToStringOffset(startRow: number, cols: number): num...

FILE: addons/addon-search/src/SearchLineCache.test.ts
  function writeP (line 10) | function writeP(terminal: Terminal, data: string): Promise<void> {

FILE: addons/addon-search/src/SearchLineCache.ts
  type LineCacheEntry (line 10) | type LineCacheEntry = [
  type Constants (line 24) | const enum Constants {
  class SearchLineCache (line 32) | class SearchLineCache extends Disposable {
    method constructor (line 45) | constructor(private readonly _terminal: Terminal) {
    method initLinesCache (line 53) | public initLinesCache(): void {
    method _destroyLinesCache (line 69) | private _destroyLinesCache(): void {
    method _scheduleLinesCacheTimeout (line 76) | private _scheduleLinesCacheTimeout(delay: number): void {
    method getLineFromCache (line 91) | public getLineFromCache(row: number): LineCacheEntry | undefined {
    method setLineInCache (line 95) | public setLineInCache(row: number, entry: LineCacheEntry): void {
    method translateBufferLineToStringWithWrap (line 109) | public translateBufferLineToStringWithWrap(lineIndex: number, trimRigh...

FILE: addons/addon-search/src/SearchResultTracker.ts
  type ISelectedDecoration (line 15) | interface ISelectedDecoration extends IDisposable {
  class SearchResultTracker (line 23) | class SearchResultTracker extends Disposable {
    method onDidChangeResults (line 28) | public get onDidChangeResults(): IEvent<ISearchResultChangeEvent> { re...
    method searchResults (line 33) | public get searchResults(): ReadonlyArray<ISearchResult> {
    method selectedDecoration (line 40) | public get selectedDecoration(): ISelectedDecoration | undefined {
    method selectedDecoration (line 47) | public set selectedDecoration(decoration: ISelectedDecoration | undefi...
    method updateResults (line 56) | public updateResults(results: ISearchResult[], maxResults: number): vo...
    method clearResults (line 63) | public clearResults(): void {
    method clearSelectedDecoration (line 70) | public clearSelectedDecoration(): void {
    method findResultIndex (line 82) | public findResultIndex(result: ISearchResult): number {
    method fireResultsChanged (line 96) | public fireResultsChanged(hasDecorations: boolean): void {
    method reset (line 115) | public reset(): void {

FILE: addons/addon-search/src/SearchState.ts
  class SearchState (line 12) | class SearchState {
    method cachedSearchTerm (line 19) | public get cachedSearchTerm(): string | undefined {
    method cachedSearchTerm (line 26) | public set cachedSearchTerm(term: string | undefined) {
    method lastSearchOptions (line 33) | public get lastSearchOptions(): ISearchOptions | undefined {
    method lastSearchOptions (line 40) | public set lastSearchOptions(options: ISearchOptions | undefined) {
    method isValidSearchTerm (line 49) | public isValidSearchTerm(term: string): boolean {
    method didOptionsChange (line 58) | public didOptionsChange(newOptions?: ISearchOptions): boolean {
    method shouldUpdateHighlighting (line 83) | public shouldUpdateHighlighting(term: string, options?: ISearchOptions...
    method clearCachedTerm (line 95) | public clearCachedTerm(): void {
    method reset (line 102) | public reset(): void {

FILE: addons/addon-search/test/SearchAddon.test.ts
  function makeData (line 564) | function makeData(length: number): string {

FILE: addons/addon-search/typings/addon-search.d.ts
  type ISearchOptions (line 12) | interface ISearchOptions {
  type ISearchDecorationOptions (line 46) | interface ISearchDecorationOptions {
  type ISearchResultChangeEvent (line 81) | interface ISearchResultChangeEvent {
  type ISearchAddonOptions (line 96) | interface ISearchAddonOptions {
  class SearchAddon (line 107) | class SearchAddon implements ITerminalAddon {

FILE: addons/addon-serialize/benchmark/SerializeAddon.benchmark.ts
  class TestTerminal (line 13) | class TestTerminal extends Terminal {
    method writeSync (line 14) | public writeSync(data: string): void {

FILE: addons/addon-serialize/src/SerializeAddon.test.ts
  function sgr (line 14) | function sgr(...seq: string[]): string {
  function writeP (line 18) | function writeP(terminal: Terminal, data: string | Uint8Array): Promise<...
  class TestSelectionService (line 22) | class TestSelectionService {
    method constructor (line 26) | constructor(
    method model (line 32) | public get model(): SelectionModel { return this._model; }
    method hasSelection (line 34) | public get hasSelection(): boolean { return this._hasSelection; }
    method selectionStart (line 36) | public get selectionStart(): [number, number] | undefined { return thi...
    method selectionEnd (line 37) | public get selectionEnd(): [number, number] | undefined { return this....
    method setSelection (line 39) | public setSelection(col: number, row: number, length: number): void {
  method createLinearGradient (line 62) | createLinearGradient(): any {
  method fillRect (line 66) | fillRect(): void { }
  method getImageData (line 68) | getImageData(): any {

FILE: addons/addon-serialize/src/SerializeAddon.ts
  function constrain (line 14) | function constrain(value: number, low: number, high: number): number {
  function escapeHTMLChar (line 18) | function escapeHTMLChar(c: string): string {
  method constructor (line 28) | constructor(
  method serialize (line 33) | public serialize(range: IBufferRange, excludeFinalCursorPosition?: boole...
  method _nextCell (line 69) | protected _nextCell(cell: IBufferCell, oldCell: IBufferCell, row: number...
  method _rowEnd (line 70) | protected _rowEnd(row: number, isLastRow: boolean): void { }
  method _beforeSerialize (line 71) | protected _beforeSerialize(rows: number, startRow: number, endRow: numbe...
  method _afterSerialize (line 72) | protected _afterSerialize(): void { }
  method _serializeString (line 73) | protected _serializeString(excludeFinalCursorPosition?: boolean): string...
  function equalFg (line 76) | function equalFg(cell1: IBufferCell | IAttributeData, cell2: IBufferCell...
  function equalBg (line 81) | function equalBg(cell1: IBufferCell | IAttributeData, cell2: IBufferCell...
  function equalUnderline (line 86) | function equalUnderline(cell1: IBufferCell | IAttributeData, cell2: IBuf...
  function equalFlags (line 107) | function equalFlags(cell1: IBufferCell | IAttributeData, cell2: IBufferC...
  function attributesEquals (line 120) | function attributesEquals(cell1: IBufferCell | IAttributeData, cell2: IB...
  class StringSerializeHandler (line 130) | class StringSerializeHandler extends BaseSerializeHandler {
    method constructor (line 157) | constructor(
    method _beforeSerialize (line 164) | protected _beforeSerialize(rows: number, start: number, end: number): ...
    method _rowEnd (line 174) | protected _rowEnd(row: number, isLastRow: boolean): void {
    method _diffStyle (line 277) | private _diffStyle(cell: IBufferCell | IAttributeData, oldCell: IBuffe...
    method _nextCell (line 348) | protected _nextCell(cell: IBufferCell, oldCell: IBufferCell, row: numb...
    method _serializeString (line 421) | protected _serializeString(excludeFinalCursorPosition: boolean): string {
  class SerializeAddon (line 482) | class SerializeAddon implements ITerminalAddon, ISerializeApi {
    method activate (line 485) | public activate(terminal: Terminal): void {
    method _serializeBufferByScrollback (line 489) | private _serializeBufferByScrollback(terminal: Terminal, buffer: IBuff...
    method _serializeBufferByRange (line 498) | private _serializeBufferByRange(terminal: Terminal, buffer: IBuffer, r...
    method _serializeBufferAsHTML (line 506) | private _serializeBufferAsHTML(terminal: Terminal, options: Partial<IH...
    method _serializeScrollRegion (line 542) | private _serializeScrollRegion(terminal: Terminal): string {
    method _serializeModes (line 557) | private _serializeModes(terminal: Terminal): string {
    method serialize (line 593) | public serialize(options?: ISerializeOptions): string {
    method serializeAsHTML (line 621) | public serializeAsHTML(options?: Partial<IHTMLSerializeOptions>): stri...
    method dispose (line 629) | public dispose(): void { }
  class HTMLSerializeHandler (line 632) | class HTMLSerializeHandler extends BaseSerializeHandler {
    method constructor (line 639) | constructor(
    method _beforeSerialize (line 655) | protected _beforeSerialize(rows: number, start: number, end: number): ...
    method _afterSerialize (line 673) | protected _afterSerialize(): void {
    method _rowEnd (line 678) | protected _rowEnd(row: number, isLastRow: boolean): void {
    method _getHexColor (line 683) | private _getHexColor(cell: IBufferCell, isFg: boolean): string | undef...
    method _getUnderlineColor (line 699) | private _getUnderlineColor(cell: IBufferCell): string | undefined {
    method _getUnderlineStyle (line 716) | private _getUnderlineStyle(cell: IBufferCell): string {
    method _diffStyle (line 733) | private _diffStyle(cell: IBufferCell, oldCell: IBufferCell): string[] ...
    method _nextCell (line 794) | protected _nextCell(cell: IBufferCell, oldCell: IBufferCell, row: numb...
    method _serializeString (line 821) | protected _serializeString(): string {

FILE: addons/addon-serialize/test/SerializeAddon.test.ts
  function testSerializeEquals (line 26) | async function testSerializeEquals(writeContent: string, expectedSeriali...
  function newArray (line 593) | function newArray<T>(initial: T | ((index: number) => T), count: number)...
  function digitsString (line 605) | function digitsString(length: number, from: number = 0, sgr: string = ''...
  function sgr (line 613) | function sgr(...seq: string[]): string {
  constant NORMAL (line 617) | const NORMAL = '0';
  constant FG_P16_RED (line 619) | const FG_P16_RED = '31';
  constant FG_P16_GREEN (line 620) | const FG_P16_GREEN = '32';
  constant FG_P16_YELLOW (line 621) | const FG_P16_YELLOW = '33';
  constant FG_P256_RED (line 622) | const FG_P256_RED = '38;5;196';
  constant FG_P256_GREEN (line 623) | const FG_P256_GREEN = '38;5;46';
  constant FG_P256_YELLOW (line 624) | const FG_P256_YELLOW = '38;5;226';
  constant FG_RGB_RED (line 625) | const FG_RGB_RED = '38;2;255;0;0';
  constant FG_RGB_GREEN (line 626) | const FG_RGB_GREEN = '38;2;0;255;0';
  constant FG_RGB_YELLOW (line 627) | const FG_RGB_YELLOW = '38;2;255;255;0';
  constant FG_RESET (line 628) | const FG_RESET = '39';
  constant BG_P16_RED (line 630) | const BG_P16_RED = '41';
  constant BG_P16_GREEN (line 631) | const BG_P16_GREEN = '42';
  constant BG_P16_YELLOW (line 632) | const BG_P16_YELLOW = '43';
  constant BG_P256_RED (line 633) | const BG_P256_RED = '48;5;196';
  constant BG_P256_GREEN (line 634) | const BG_P256_GREEN = '48;5;46';
  constant BG_P256_YELLOW (line 635) | const BG_P256_YELLOW = '48;5;226';
  constant BG_RGB_RED (line 636) | const BG_RGB_RED = '48;2;255;0;0';
  constant BG_RGB_GREEN (line 637) | const BG_RGB_GREEN = '48;2;0;255;0';
  constant BG_RGB_YELLOW (line 638) | const BG_RGB_YELLOW = '48;2;255;255;0';
  constant BG_RESET (line 639) | const BG_RESET = '49';
  constant BOLD (line 641) | const BOLD = '1';
  constant DIM (line 642) | const DIM = '2';
  constant ITALIC (line 643) | const ITALIC = '3';
  constant UNDERLINED (line 644) | const UNDERLINED = '4';
  constant UNDERLINE_DOUBLE (line 645) | const UNDERLINE_DOUBLE = '4:2';
  constant UNDERLINE_COLOR_RED (line 646) | const UNDERLINE_COLOR_RED = '58;5;196';
  constant UNDERLINE_COLOR_GREEN (line 647) | const UNDERLINE_COLOR_GREEN = '58;5;46';
  constant BLINK (line 648) | const BLINK = '5';
  constant INVERSE (line 649) | const INVERSE = '7';
  constant INVISIBLE (line 650) | const INVISIBLE = '8';
  constant STRIKETHROUGH (line 651) | const STRIKETHROUGH = '9';
  constant OVERLINED (line 652) | const OVERLINED = '53';
  constant NO_BOLD (line 654) | const NO_BOLD = '22';
  constant NO_DIM (line 655) | const NO_DIM = '22';
  constant NO_ITALIC (line 656) | const NO_ITALIC = '23';
  constant NO_UNDERLINED (line 657) | const NO_UNDERLINED = '24';
  constant NO_BLINK (line 658) | const NO_BLINK = '25';
  constant NO_INVERSE (line 659) | const NO_INVERSE = '27';
  constant NO_INVISIBLE (line 660) | const NO_INVISIBLE = '28';
  constant NO_STRIKETHROUGH (line 661) | const NO_STRIKETHROUGH = '29';
  constant NO_OVERLINED (line 662) | const NO_OVERLINED = '55';

FILE: addons/addon-serialize/typings/addon-serialize.d.ts
  class SerializeAddon (line 12) | class SerializeAddon implements ITerminalAddon {
  type ISerializeOptions (line 50) | interface ISerializeOptions {
  type IHTMLSerializeOptions (line 75) | interface IHTMLSerializeOptions {
  type ISerializeBufferRange (line 100) | interface ISerializeBufferRange {
  type ISerializeRange (line 106) | interface ISerializeRange {

FILE: addons/addon-unicode-graphemes/benchmark/UnicodeGraphemeAddon.benchmark.ts
  function fakedAddonLoad (line 14) | function fakedAddonLoad(terminal: any): void {

FILE: addons/addon-unicode-graphemes/src/UnicodeGraphemeProvider.ts
  class UnicodeGraphemeProvider (line 11) | class UnicodeGraphemeProvider implements IUnicodeVersionProvider {
    method constructor (line 16) | constructor(handleGraphemes: boolean = true) {
    method charProperties (line 24) | public charProperties(codepoint: number, preceding: UnicodeCharPropert...
    method wcwidth (line 60) | public wcwidth(codepoint: number): UnicodeCharWidth {

FILE: addons/addon-unicode-graphemes/src/UnicodeGraphemesAddon.ts
  class UnicodeGraphemesAddon (line 12) | class UnicodeGraphemesAddon implements ITerminalAddon, IUnicodeGraphemes...
    method activate (line 18) | public activate(terminal: Terminal): void {
    method dispose (line 29) | public dispose(): void {

FILE: addons/addon-unicode-graphemes/src/third-party/UnicodeProperties.ts
  function _dec (line 5) | function _dec(s: string): Uint8Array {
  constant GRAPHEME_BREAK_MASK (line 14) | const GRAPHEME_BREAK_MASK = 0xF;
  constant GRAPHEME_BREAK_SHIFT (line 15) | const GRAPHEME_BREAK_SHIFT = 0;
  constant CHARWIDTH_MASK (line 16) | const CHARWIDTH_MASK = 0x30;
  constant CHARWIDTH_SHIFT (line 17) | const CHARWIDTH_SHIFT = 4;
  constant GRAPHEME_BREAK_ZWJ (line 30) | const GRAPHEME_BREAK_ZWJ = 10;
  constant CHARWIDTH_NORMAL (line 38) | const CHARWIDTH_NORMAL = 0;
  constant CHARWIDTH_FORCE_1COLUMN (line 39) | const CHARWIDTH_FORCE_1COLUMN = 1;
  constant CHARWIDTH_EA_AMBIGUOUS (line 40) | const CHARWIDTH_EA_AMBIGUOUS = 2;
  constant CHARWIDTH_WIDE (line 41) | const CHARWIDTH_WIDE = 3;
  function infoToWidthInfo (line 47) | function infoToWidthInfo(info: number): number {
  function infoToWidth (line 51) | function infoToWidth(info: number, ambiguousIsWide = false): 0 | 1 |2 {
  function strWidth (line 57) | function strWidth(str: string, preferWide: boolean): number {
  function columnToIndexInContext (line 67) | function columnToIndexInContext(str: string, startIndex: number, column:...
  function shouldJoin (line 87) | function shouldJoin(beforeState: number, afterInfo: number): number {
  function shouldJoinBackwards (line 99) | function shouldJoinBackwards(beforeInfo: number, afterState: number): nu...
  function _shouldJoin (line 112) | function _shouldJoin(beforeCode: number, afterCode: number): boolean {
  function getInfo (line 145) | function getInfo(codePoint: number): number {

FILE: addons/addon-unicode-graphemes/src/third-party/tiny-inflate.ts
  class Tree (line 4) | class Tree {
  class Data (line 9) | class Data {
    method constructor (line 19) | constructor(source: Uint8Array, dest: Uint8Array) {
  function tinf_build_bits_base (line 58) | function tinf_build_bits_base(bits: Uint8Array, base: Uint16Array, delta...
  function tinf_build_fixed_trees (line 73) | function tinf_build_fixed_trees(lt: Tree, dt: Tree): void {
  function tinf_build_tree (line 99) | function tinf_build_tree(t: Tree, lengths: Uint8Array, off: number, num:...
  function tinf_getbit (line 127) | function tinf_getbit(d: Data): number {
  function tinf_read_bits (line 143) | function tinf_read_bits(d: Data, num: number, base: number): number {
  function tinf_decode_symbol (line 159) | function tinf_decode_symbol(d: Data, t: Tree): number {
  function tinf_decode_trees (line 185) | function tinf_decode_trees(d: Data, lt: Tree, dt: Tree): void {
  function tinf_inflate_block_data (line 251) | function tinf_inflate_block_data(d: Data, lt: Tree, dt: Tree): number {
  function tinf_inflate_uncompressed_block (line 285) | function tinf_inflate_uncompressed_block(d: Data) {
  function tinf_uncompress (line 320) | function tinf_uncompress(source: Uint8Array, dest: Uint8Array) {

FILE: addons/addon-unicode-graphemes/src/third-party/unicode-trie.ts
  constant SHIFT_1 (line 4) | const SHIFT_1 = 6 + 5;
  constant SHIFT_2 (line 7) | const SHIFT_2 = 5;
  constant SHIFT_1_2 (line 11) | const SHIFT_1_2 = SHIFT_1 - SHIFT_2;
  constant OMITTED_BMP_INDEX_1_LENGTH (line 15) | const OMITTED_BMP_INDEX_1_LENGTH = 0x10000 >> SHIFT_1;
  constant INDEX_2_BLOCK_LENGTH (line 18) | const INDEX_2_BLOCK_LENGTH = 1 << SHIFT_1_2;
  constant INDEX_2_MASK (line 21) | const INDEX_2_MASK = INDEX_2_BLOCK_LENGTH - 1;
  constant INDEX_SHIFT (line 27) | const INDEX_SHIFT = 2;
  constant DATA_BLOCK_LENGTH (line 30) | const DATA_BLOCK_LENGTH = 1 << SHIFT_2;
  constant DATA_MASK (line 33) | const DATA_MASK = DATA_BLOCK_LENGTH - 1;
  constant LSCP_INDEX_2_OFFSET (line 39) | const LSCP_INDEX_2_OFFSET = 0x10000 >> SHIFT_2;
  constant LSCP_INDEX_2_LENGTH (line 40) | const LSCP_INDEX_2_LENGTH = 0x400 >> SHIFT_2;
  constant INDEX_2_BMP_LENGTH (line 43) | const INDEX_2_BMP_LENGTH = LSCP_INDEX_2_OFFSET + LSCP_INDEX_2_LENGTH;
  constant UTF8_2B_INDEX_2_OFFSET (line 47) | const UTF8_2B_INDEX_2_OFFSET = INDEX_2_BMP_LENGTH;
  constant UTF8_2B_INDEX_2_LENGTH (line 48) | const UTF8_2B_INDEX_2_LENGTH = 0x800 >> 6;
  constant INDEX_1_OFFSET (line 60) | const INDEX_1_OFFSET = UTF8_2B_INDEX_2_OFFSET + UTF8_2B_INDEX_2_LENGTH;
  constant DATA_GRANULARITY (line 63) | const DATA_GRANULARITY = 1 << INDEX_SHIFT;
  class UnicodeTrie (line 67) | class UnicodeTrie {
    method constructor (line 71) | constructor(data: Uint8Array) {
    method get (line 99) | get(codePoint: number): number {

FILE: addons/addon-unicode-graphemes/test/UnicodeGraphemesAddon.test.ts
  function evalWidth (line 28) | async function evalWidth(str: string): Promise<number> {

FILE: addons/addon-unicode-graphemes/typings/addon-unicode-graphemes.d.ts
  class UnicodeGraphemesAddon (line 9) | class UnicodeGraphemesAddon implements ITerminalAddon {

FILE: addons/addon-unicode11/src/Unicode11Addon.ts
  class Unicode11Addon (line 12) | class Unicode11Addon implements ITerminalAddon, IUnicode11Api {
    method activate (line 13) | public activate(terminal: Terminal): void {
    method dispose (line 16) | public dispose(): void { }

FILE: addons/addon-unicode11/src/UnicodeV11.ts
  constant BMP_COMBINING (line 10) | const BMP_COMBINING = [
  constant HIGH_COMBINING (line 84) | const HIGH_COMBINING = [
  constant BMP_WIDE (line 126) | const BMP_WIDE = [
  constant HIGH_WIDE (line 149) | const HIGH_WIDE = [
  function bisearch (line 173) | function bisearch(ucs: number, data: number[][]): boolean {
  class UnicodeV11 (line 194) | class UnicodeV11 implements IUnicodeVersionProvider {
    method constructor (line 197) | constructor() {
    method wcwidth (line 213) | public wcwidth(num: number): UnicodeCharWidth {
    method charProperties (line 222) | public charProperties(codepoint: number, preceding: UnicodeCharPropert...

FILE: addons/addon-unicode11/typings/addon-unicode11.d.ts
  class Unicode11Addon (line 9) | class Unicode11Addon implements ITerminalAddon {

FILE: addons/addon-web-fonts/src/WebFontsAddon.ts
  function unquote (line 13) | function unquote(s: string): string {
  function quote (line 24) | function quote(s: string): string {
  function splitFamily (line 32) | function splitFamily(family: string | undefined): string[] {
  function createFamily (line 38) | function createFamily(families: string[]): string {
  function hashFontFace (line 48) | function hashFontFace(ff: FontFace): string {
  function _loadFonts (line 73) | function _loadFonts(fonts?: (string | FontFace)[]): Promise<FontFace[]> {
  function loadFonts (line 105) | function loadFonts(fonts?: (string | FontFace)[]): Promise<FontFace[]> {
  class WebFontsAddon (line 110) | class WebFontsAddon implements ITerminalAddon, IWebFontsApi {
    method constructor (line 113) | constructor(public initialRelayout: boolean = true) { }
    method dispose (line 115) | public dispose(): void {
    method activate (line 119) | public activate(term: Terminal): void {
    method loadFonts (line 126) | public loadFonts(fonts?: (string | FontFace)[]): Promise<FontFace[]> {
    method relayout (line 130) | public async relayout(): Promise<void> {

FILE: addons/addon-web-fonts/test/WebFontsAddon.test.ts
  function getDocumentFonts (line 118) | async function getDocumentFonts(): Promise<any> {

FILE: addons/addon-web-fonts/typings/addon-web-fonts.d.ts
  class WebFontsAddon (line 14) | class WebFontsAddon implements ITerminalAddon {

FILE: addons/addon-web-links/src/WebLinkProvider.ts
  type ILinkProviderOptions (line 8) | interface ILinkProviderOptions {
  class WebLinkProvider (line 14) | class WebLinkProvider implements ILinkProvider {
    method constructor (line 16) | constructor(
    method provideLinks (line 25) | public provideLinks(y: number, callback: (links: ILink[] | undefined) ...
    method _addCallbacks (line 30) | private _addCallbacks(links: ILink[]): ILink[] {
  function isUrl (line 44) | function isUrl(urlString: string): boolean {
  class LinkComputer (line 58) | class LinkComputer {
    method computeLink (line 59) | public static computeLink(y: number, regex: RegExp, terminal: Terminal...
    method _getWindowedLineStrings (line 112) | private static _getWindowedLineStrings(lineIndex: number, terminal: Te...
    method _mapStrIdx (line 159) | private static _mapStrIdx(terminal: Terminal, lineIndex: number, rowIn...

FILE: addons/addon-web-links/src/WebLinksAddon.ts
  function handleLink (line 24) | function handleLink(event: MouseEvent, uri: string): void {
  class WebLinksAddon (line 38) | class WebLinksAddon implements ITerminalAddon, IWebLinksApi {
    method constructor (line 42) | constructor(
    method activate (line 48) | public activate(terminal: Terminal): void {
    method dispose (line 55) | public dispose(): void {

FILE: addons/addon-web-links/test/WebLinksAddon.test.ts
  type ILinkStateData (line 11) | interface ILinkStateData {
  function testHostName (line 139) | async function testHostName(hostname: string): Promise<void> {
  function pollForLinkAtCell (line 158) | async function pollForLinkAtCell(col: number, row: number, value: string...
  function resetAndHover (line 165) | async function resetAndHover(col: number, row: number): Promise<void> {
  function evalLinkStateData (line 173) | async function evalLinkStateData(uri: string, range: any): Promise<void> {
  function cellPos (line 179) | async function cellPos(col: number, row: number): Promise<[number, numbe...

FILE: addons/addon-web-links/typings/addon-web-links.d.ts
  class WebLinksAddon (line 13) | class WebLinksAddon implements ITerminalAddon {
  type ILinkProviderOptions (line 40) | interface ILinkProviderOptions {

FILE: addons/addon-webgl/src/CellColorResolver.ts
  class CellColorResolver (line 21) | class CellColorResolver {
    method constructor (line 32) | constructor(
    method resolve (line 46) | public resolve(cell: ICellData, x: number, y: number, deviceCellWidth:...

FILE: addons/addon-webgl/src/CharAtlasCache.ts
  type ITextureAtlasCacheEntry (line 13) | interface ITextureAtlasCacheEntry {
  function acquireTextureAtlas (line 27) | function acquireTextureAtlas(
  function removeTerminalFromCache (line 85) | function removeTerminalFromCache(terminal: Terminal): void {

FILE: addons/addon-webgl/src/CharAtlasUtils.ts
  function generateConfig (line 12) | function generateConfig(deviceCellWidth: number, deviceCellHeight: numbe...
  function configEquals (line 55) | function configEquals(a: ICharAtlasConfig, b: ICharAtlasConfig): boolean {
  function is256Color (line 78) | function is256Color(colorCode: number): boolean {

FILE: addons/addon-webgl/src/Constants.ts
  constant DIM_OPACITY (line 8) | const DIM_OPACITY = 0.5;
  constant TEXT_BASELINE (line 12) | const TEXT_BASELINE: CanvasTextBaseline = isFirefox || isLegacyEdge ? 'b...

FILE: addons/addon-webgl/src/CursorBlinkStateManager.ts
  type Constants (line 9) | const enum Constants {
  class CursorBlinkStateManager (line 16) | class CursorBlinkStateManager {
    method constructor (line 32) | constructor(
    method isPaused (line 43) | public get isPaused(): boolean { return !(this._blinkStartTimeout || t...
    method dispose (line 45) | public dispose(): void {
    method restartBlinkAnimation (line 64) | public restartBlinkAnimation(): void {
    method _restartInterval (line 83) | private _restartInterval(timeToStart: number = Constants.BLINK_INTERVA...
    method pause (line 135) | public pause(): void {
    method resume (line 156) | public resume(): void {
    method _resetIdleTimer (line 170) | private _resetIdleTimer(): void {
    method _stopBlinkingDueToIdle (line 183) | private _stopBlinkingDueToIdle(): void {

FILE: addons/addon-webgl/src/DevicePixelObserver.ts
  function observeDevicePixelDimensions (line 8) | function observeDevicePixelDimensions(element: HTMLElement, parentWindow...

FILE: addons/addon-webgl/src/GlyphRenderer.ts
  type IVertices (line 15) | interface IVertices {
  type VertexAttribLocations (line 27) | const enum VertexAttribLocations {
  function createFragmentShaderSource (line 59) | function createFragmentShaderSource(maxFragmentShaderTextureUnits: numbe...
  constant INDICES_PER_CELL (line 81) | const INDICES_PER_CELL = 11;
  constant BYTES_PER_CELL (line 82) | const BYTES_PER_CELL = INDICES_PER_CELL * Float32Array.BYTES_PER_ELEMENT;
  constant CELL_POSITION_INDICES (line 83) | const CELL_POSITION_INDICES = 2;
  class GlyphRenderer (line 91) | class GlyphRenderer extends Disposable {
    method constructor (line 111) | constructor(
    method beginFrame (line 212) | public beginFrame(): boolean {
    method updateCell (line 216) | public updateCell(x: number, y: number, code: number, bg: number, fg: ...
    method _updateCell (line 224) | private _updateCell(array: Float32Array, x: number, y: number, code: n...
    method clear (line 289) | public clear(): void {
    method handleResize (line 318) | public handleResize(): void {
    method render (line 326) | public render(renderModel: IRenderModel): void {
    method setAtlas (line 370) | public setAtlas(atlas: ITextureAtlas): void {
    method _bindAtlasPageTexture (line 377) | private _bindAtlasPageTexture(gl: IWebGL2RenderingContext, atlas: ITex...
    method setDimensions (line 387) | public setDimensions(dimensions: IRenderDimensions): void {

FILE: addons/addon-webgl/src/RectangleRenderer.ts
  type VertexAttribLocations (line 18) | const enum VertexAttribLocations {
  constant INDICES_PER_RECTANGLE (line 52) | const INDICES_PER_RECTANGLE = 8;
  constant BYTES_PER_RECTANGLE (line 53) | const BYTES_PER_RECTANGLE = INDICES_PER_RECTANGLE * Float32Array.BYTES_P...
  constant INITIAL_BUFFER_RECTANGLE_CAPACITY (line 55) | const INITIAL_BUFFER_RECTANGLE_CAPACITY = 20 * INDICES_PER_RECTANGLE;
  class Vertices (line 57) | class Vertices {
    method constructor (line 61) | constructor() {
  class RectangleRenderer (line 76) | class RectangleRenderer extends Disposable {
    method constructor (line 88) | constructor(
    method renderBackgrounds (line 147) | public renderBackgrounds(): void {
    method renderCursor (line 151) | public renderCursor(): void {
    method _renderVertices (line 155) | private _renderVertices(vertices: Vertices): void {
    method handleResize (line 170) | public handleResize(): void {
    method setDimensions (line 174) | public setDimensions(dimensions: IRenderDimensions): void {
    method _updateCachedColors (line 178) | private _updateCachedColors(colors: ReadonlyColorSet): void {
    method _updateViewportRectangle (line 183) | private _updateViewportRectangle(): void {
    method updateBackgrounds (line 196) | public updateBackgrounds(model: IRenderModel): void {
    method updateCursor (line 245) | public updateCursor(model: IRenderModel): void {
    method _updateRectangle (line 310) | private _updateRectangle(vertices: Vertices, offset: number, fg: numbe...
    method _addRectangle (line 352) | private _addRectangle(array: Float32Array, offset: number, x1: number,...
    method _addRectangleFloat (line 363) | private _addRectangleFloat(array: Float32Array, offset: number, x1: nu...
    method _colorToFloat32Array (line 374) | private _colorToFloat32Array(color: IColor): Float32Array {

FILE: addons/addon-webgl/src/RenderModel.ts
  constant RENDER_MODEL_INDICIES_PER_CELL (line 10) | const RENDER_MODEL_INDICIES_PER_CELL = 4;
  constant RENDER_MODEL_BG_OFFSET (line 11) | const RENDER_MODEL_BG_OFFSET = 1;
  constant RENDER_MODEL_FG_OFFSET (line 12) | const RENDER_MODEL_FG_OFFSET = 2;
  constant RENDER_MODEL_EXT_OFFSET (line 13) | const RENDER_MODEL_EXT_OFFSET = 3;
  constant COMBINED_CHAR_BIT_MASK (line 15) | const COMBINED_CHAR_BIT_MASK = 0x80000000;
  class RenderModel (line 17) | class RenderModel implements IRenderModel {
    method constructor (line 23) | constructor() {
    method resize (line 29) | public resize(cols: number, rows: number): void {
    method clear (line 37) | public clear(): void {

FILE: addons/addon-webgl/src/TextureAtlas.ts
  constant NULL_RASTERIZED_GLYPH (line 23) | const NULL_RASTERIZED_GLYPH: IRasterizedGlyph = {
  constant TMP_CANVAS_GLYPH_PADDING (line 32) | const TMP_CANVAS_GLYPH_PADDING = 2;
  type Constants (line 34) | const enum Constants {
  type ICharAtlasActiveRow (line 48) | interface ICharAtlasActiveRow {
  class TextureAtlas (line 57) | class TextureAtlas implements ITextureAtlas {
    method pages (line 65) | public get pages(): { canvas: HTMLCanvasElement, version: number }[] {...
    method constructor (line 88) | constructor(
    method dispose (line 106) | public dispose(): void {
    method warmUp (line 114) | public warmUp(): void {
    method _doWarmUp (line 121) | private _doWarmUp(): void {
    method beginFrame (line 135) | public beginFrame(): boolean {
    method clearTexture (line 139) | public clearTexture(): void {
    method _createNewPage (line 151) | private _createNewPage(): AtlasPage {
    method _mergePages (line 219) | private _mergePages(mergingPages: AtlasPage[], mergedPageIndex: number...
    method _deletePage (line 247) | private _deletePage(pageIndex: number): void {
    method getRasterizedGlyphCombinedChar (line 258) | public getRasterizedGlyphCombinedChar(chars: string, bg: number, fg: n...
    method getRasterizedGlyph (line 262) | public getRasterizedGlyph(code: number, bg: number, fg: number, ext: n...
    method _getFromCacheMap (line 269) | private _getFromCacheMap(
    method _getColorFromAnsiIndex (line 286) | private _getColorFromAnsiIndex(idx: number): IColor {
    method _getBackgroundColor (line 293) | private _getBackgroundColor(bgColorMode: number, bgColor: number, inve...
    method _getForegroundColor (line 329) | private _getForegroundColor(bg: number, bgColorMode: number, bgColor: ...
    method _resolveBackgroundRgba (line 370) | private _resolveBackgroundRgba(bgColorMode: number, bgColor: number, i...
    method _resolveForegroundRgba (line 386) | private _resolveForegroundRgba(fgColorMode: number, fgColor: number, i...
    method _getMinimumContrastColor (line 405) | private _getMinimumContrastColor(bg: number, bgColorMode: number, bgCo...
    method _getContrastCache (line 438) | private _getContrastCache(dim: boolean): IColorContrastCache {
    method _drawToCache (line 445) | private _drawToCache(codeOrChars: number | string, bg: number, fg: num...
    method _findGlyphBoundingBox (line 952) | private _findGlyphBoundingBox(imageData: ImageData, boundingBox: IBoun...
  class AtlasPage (line 1035) | class AtlasPage {
    method percentageUsed (line 1040) | public get percentageUsed(): number { return this._usedPixels / (this....
    method glyphs (line 1043) | public get glyphs(): ReadonlyArray<IRasterizedGlyph> { return this._gl...
    method addGlyph (line 1044) | public addGlyph(glyph: IRasterizedGlyph): void {
    method constructor (line 1071) | constructor(
    method clear (line 1089) | public clear(): void {
  function clearColor (line 1104) | function clearColor(imageData: ImageData, bg: IColor, fg: IColor, enable...
  function checkCompletelyTransparent (line 1145) | function checkCompletelyTransparent(imageData: ImageData): boolean {
  function createCanvas (line 1154) | function createCanvas(document: Document, width: number, height: number)...

FILE: addons/addon-webgl/src/TypedArray.test.ts
  type TypedArray (line 8) | type TypedArray = Uint8Array | Uint16Array | Uint32Array | Uint8ClampedA...
  function deepEquals (line 10) | function deepEquals(a: TypedArray, b: TypedArray): void {

FILE: addons/addon-webgl/src/TypedArray.ts
  type TypedArray (line 6) | type TypedArray = Uint8Array | Uint16Array | Uint32Array | Uint8ClampedA...
  function slice (line 8) | function slice<T extends TypedArray>(array: T, start?: number, end?: num...
  function sliceFallback (line 16) | function sliceFallback<T extends TypedArray>(array: T, start: number = 0...

FILE: addons/addon-webgl/src/Types.ts
  type IRenderModel (line 12) | interface IRenderModel {
  type ICursorRenderModel (line 19) | interface ICursorRenderModel {
  type IWebGL2RenderingContext (line 28) | interface IWebGL2RenderingContext extends WebGLRenderingContext {
  type IWebGLVertexArrayObject (line 35) | interface IWebGLVertexArrayObject {
  type ICharAtlasConfig (line 38) | interface ICharAtlasConfig {
  type ITextureAtlas (line 58) | interface ITextureAtlas extends IDisposable {
  type IRasterizedGlyph (line 88) | interface IRasterizedGlyph {
  type IVector (line 116) | interface IVector {
  type IBoundingBox (line 121) | interface IBoundingBox {

FILE: addons/addon-webgl/src/WebglAddon.ts
  class WebglAddon (line 17) | class WebglAddon extends Disposable implements ITerminalAddon, IWebglApi {
    method constructor (line 33) | constructor(options?: IWebglAddonOptions) {
    method activate (line 51) | public activate(terminal: Terminal): void {
    method textureAtlas (line 98) | public get textureAtlas(): HTMLCanvasElement | undefined {
    method clearTextureAtlas (line 102) | public clearTextureAtlas(): void {

FILE: addons/addon-webgl/src/WebglRenderer.ts
  class WebglRenderer (line 31) | class WebglRenderer extends Disposable implements IRenderer {
    method constructor (line 69) | constructor(
    method textureAtlas (line 165) | public get textureAtlas(): HTMLCanvasElement | undefined {
    method _handleColorChange (line 169) | private _handleColorChange(): void {
    method handleDevicePixelRatioChange (line 176) | public handleDevicePixelRatioChange(): void {
    method handleResize (line 185) | public handleResize(cols: number, rows: number): void {
    method handleCharSizeChanged (line 222) | public handleCharSizeChanged(): void {
    method handleBlur (line 226) | public handleBlur(): void {
    method handleFocus (line 235) | public handleFocus(): void {
    method handleViewportVisibilityChange (line 244) | public handleViewportVisibilityChange(isVisible: boolean): void {
    method handleSelectionChanged (line 248) | public handleSelectionChanged(start: [number, number] | undefined, end...
    method handleCursorMove (line 256) | public handleCursorMove(): void {
    method _handleOptionsChanged (line 263) | private _handleOptionsChanged(): void {
    method _initializeWebGLState (line 272) | private _initializeWebGLState(): [RectangleRenderer, GlyphRenderer] {
    method _refreshCharAtlas (line 285) | private _refreshCharAtlas(): void {
    method _clearModel (line 321) | private _clearModel(clearGlyphRenderer: boolean): void {
    method clearTextureAtlas (line 328) | public clearTextureAtlas(): void {
    method clear (line 334) | public clear(): void {
    method renderRows (line 347) | public renderRows(start: number, end: number): void {
    method _updateCursorBlink (line 386) | private _updateCursorBlink(): void {
    method _updateModel (line 399) | private _updateModel(start: number, end: number): void {
    method _resetBlinkingRowState (line 590) | private _resetBlinkingRowState(): void {
    method _setRowBlinkState (line 595) | private _setRowBlinkState(row: number, hasBlinkingCells: boolean): void {
    method _updateTextBlinkState (line 604) | private _updateTextBlinkState(): void {
    method _updateDimensions (line 611) | private _updateDimensions(): void {
    method _setCanvasDevicePixelDimensions (line 663) | private _setCanvasDevicePixelDimensions(width: number, height: number)...
    method _requestRedrawViewport (line 675) | private _requestRedrawViewport(): void {
    method _requestRedrawCursor (line 679) | private _requestRedrawCursor(): void {
  class JoinedCellData (line 686) | class JoinedCellData extends AttributeData implements ICellData {
    method constructor (line 695) | constructor(firstCell: ICellData, chars: string, width: number) {
    method isCombined (line 703) | public isCombined(): number {
    method getWidth (line 708) | public getWidth(): number {
    method getChars (line 712) | public getChars(): string {
    method getCode (line 716) | public getCode(): number {
    method setFromCharData (line 722) | public setFromCharData(value: CharData): void {
    method getAsCharData (line 726) | public getAsCharData(): CharData {
  function clamp (line 731) | function clamp(value: number, max: number, min: number = 0): number {

FILE: addons/addon-webgl/src/WebglUtils.ts
  constant PROJECTION_MATRIX (line 12) | const PROJECTION_MATRIX = new Float32Array([
  function createProgram (line 19) | function createProgram(gl: WebGLRenderingContext, vertexSource: string, ...
  function createShader (line 33) | function createShader(gl: WebGLRenderingContext, type: number, source: s...
  function expandFloat32Array (line 46) | function expandFloat32Array(source: Float32Array, max: number): Float32A...
  class GLTexture (line 55) | class GLTexture {
    method constructor (line 59) | constructor(texture: WebGLTexture) {

FILE: addons/addon-webgl/src/customGlyphs/CustomGlyphDefinitions.ts
  type Shapes (line 10) | const enum Shapes {
  function sextant (line 879) | function sextant(pattern: number): { type: CustomGlyphDefinitionType.PAT...
  function segmentedDigit (line 932) | function segmentedDigit(pattern: number): string {

FILE: addons/addon-webgl/src/customGlyphs/CustomGlyphRasterizer.ts
  function tryDrawCustomGlyph (line 14) | function tryDrawCustomGlyph(
  function drawDefinitionPart (line 41) | function drawDefinitionPart(
  function drawBlockVectorChar (line 103) | function drawBlockVectorChar(
  function drawBrailleCharacter (line 143) | function drawBrailleCharacter(
  function drawPathDefinitionCharacter (line 170) | function drawPathDefinitionCharacter(
  function drawSvgArc (line 292) | function drawSvgArc(
  function drawPathNegativeDefinitionCharacter (line 379) | function drawPathNegativeDefinitionCharacter(
  function drawPatternChar (line 436) | function drawPatternChar(
  function drawPathFunctionCharacter (line 505) | function drawPathFunctionCharacter(
  function applyClipPath (line 563) | function applyClipPath(
  function drawVectorShape (line 593) | function drawVectorShape(
  function clamp (line 651) | function clamp(value: number, max: number, min: number = 0): number {
  type ISvgPathState (line 655) | interface ISvgPathState {
  function translateArgs (line 706) | function translateArgs(args: string[], cellWidth: number, cellHeight: nu...

FILE: addons/addon-webgl/src/customGlyphs/Types.ts
  type ICustomGlyphSolidOctantBlockVector (line 6) | interface ICustomGlyphSolidOctantBlockVector {
  type CustomGlyphPathDrawFunctionDefinition (line 17) | type CustomGlyphPathDrawFunctionDefinition = (xp: number, yp: number) =>...
  type ICustomGlyphVectorShape (line 19) | interface ICustomGlyphVectorShape {
  type CustomGlyphVectorType (line 26) | const enum CustomGlyphVectorType {
  type CustomGlyphPatternDefinition (line 31) | type CustomGlyphPatternDefinition = number[][];
  type CustomGlyphDefinitionType (line 33) | const enum CustomGlyphDefinitionType {
  type CustomGlyphDefinitionPartRaw (line 43) | type CustomGlyphDefinitionPartRaw = (
  type CustomGlyphScaleType (line 53) | const enum CustomGlyphScaleType {
  type ICustomGlyphDefinitionCommon (line 64) | interface ICustomGlyphDefinitionCommon {
  type CustomGlyphDefinitionPart (line 80) | type CustomGlyphDefinitionPart = CustomGlyphDefinitionPartRaw & ICustomG...
  type CustomGlyphCharacterDefinition (line 85) | type CustomGlyphCharacterDefinition = CustomGlyphDefinitionPart | Custom...

FILE: addons/addon-webgl/src/renderLayer/BaseRenderLayer.ts
  method constructor (line 31) | constructor(
  method _initCanvas (line 56) | private _initCanvas(): void {
  method handleBlur (line 64) | public handleBlur(terminal: Terminal): void {}
  method handleFocus (line 65) | public handleFocus(terminal: Terminal): void {}
  method handleCursorMove (line 66) | public handleCursorMove(terminal: Terminal): void {}
  method handleGridChanged (line 67) | public handleGridChanged(terminal: Terminal, startRow: number, endRow: n...
  method handleSelectionChanged (line 68) | public handleSelectionChanged(terminal: Terminal, start: [number, number...
  method _setTransparency (line 70) | protected _setTransparency(terminal: Terminal, alpha: boolean): void {
  method _refreshCharAtlas (line 94) | private _refreshCharAtlas(terminal: Terminal, colorSet: ReadonlyColorSet...
  method resize (line 103) | public resize(terminal: Terminal, dim: IRenderDimensions): void {
  method _fillBottomLineAtCells (line 131) | protected _fillBottomLineAtCells(x: number, y: number, width: number = 1...
  method _clearAll (line 142) | protected _clearAll(): void {
  method _clearCells (line 158) | protected _clearCells(x: number, y: number, width: number, height: numbe...
  method _fillCharTrueColor (line 184) | protected _fillCharTrueColor(terminal: Terminal, cell: CellData, x: numb...
  method _clipCell (line 200) | private _clipCell(x: number, y: number, width: number): void {
  method _getFont (line 215) | protected _getFont(terminal: Terminal, isBold: boolean, isItalic: boolea...

FILE: addons/addon-webgl/src/renderLayer/LinkRenderLayer.ts
  class LinkRenderLayer (line 15) | class LinkRenderLayer extends BaseRenderLayer {
    method constructor (line 18) | constructor(
    method resize (line 33) | public resize(terminal: Terminal, dim: IRenderDimensions): void {
    method reset (line 39) | public reset(terminal: Terminal): void {
    method _clearCurrentLink (line 43) | private _clearCurrentLink(): void {
    method _handleShowLinkUnderline (line 55) | private _handleShowLinkUnderline(e: ILinkifierEvent): void {
    method _handleHideLinkUnderline (line 79) | private _handleHideLinkUnderline(e: ILinkifierEvent): void {

FILE: addons/addon-webgl/src/renderLayer/Types.ts
  type IRenderLayer (line 9) | interface IRenderLayer extends IDisposable {

FILE: addons/addon-webgl/typings/addon-webgl.d.ts
  class WebglAddon (line 12) | class WebglAddon implements ITerminalAddon {
  type IWebglAddonOptions (line 54) | interface IWebglAddonOptions {

FILE: bin/agent/setup-repo.mjs
  function log (line 15) | function log(message) {
  function runNpm (line 20) | function runNpm(args) {
  function addCandidate (line 39) | function addCandidate(candidates, folder, reason) {
  function detectMainSiblingFolder (line 50) | function detectMainSiblingFolder() {
  function detectWorktreeMainFolder (line 61) | function detectWorktreeMainFolder() {
  function resolveSourceFolder (line 96) | function resolveSourceFolder() {

FILE: bin/convert_svg_to_custom_glyph.js
  function processFile (line 33) | function processFile(filePath) {

FILE: bin/esbuild.mjs
  function getAddonEntryPoint (line 67) | function getAddonEntryPoint(addon) {

FILE: bin/esbuild_all.mjs
  function log (line 34) | function log(message) {
  function createJob (line 42) | function createJob(name, extraArgs) {

FILE: bin/extract_vtfeatures.js
  constant REX_COMMENTS (line 14) | const REX_COMMENTS = /^\s*?\/\*\*([\S\s]*?)\*\/|^\s*?\/\/ (@vt:.*?)$/mug;
  constant REX_VT_LINE (line 20) | const REX_VT_LINE = /^@vt:\s*(\w+|#\w+|#\w+\[.*?\])\s*(\w+)\s*(\w+)\s*"(...
  constant TYPES (line 23) | const TYPES = [
  constant MARKDOWN_TMPL (line 35) | const MARKDOWN_TMPL = `---
  constant MACRO (line 330) | const MACRO = [
  function applyMacros (line 343) | function applyMacros(s) {
  function createAnchorSlug (line 356) | function createAnchorSlug(s) {
  function empty (line 360) | function empty(ar) {
  function parseSingleLine (line 415) | function parseSingleLine(filename, s) {
  function getSorter (line 436) | function getSorter(entry) {
  function postProcessData (line 463) | function postProcessData(features) {
  function main (line 484) | function main(filenames) {

FILE: bin/lint_changes.js
  function getChangedFiles (line 15) | function getChangedFiles() {

FILE: bin/package_headless.js
  function mkdirF (line 41) | function mkdirF(p) {

FILE: bin/publish.js
  function checkAndPublishPackage (line 71) | function checkAndPublishPackage(packageDir, repoCommit, peerDependencies...
  function getRepoCommit (line 137) | function getRepoCommit() {
  function getNextBetaVersion (line 147) | function getNextBetaVersion(packageJson) {
  function asArray (line 167) | function asArray(value) {
  function getPublishedVersions (line 171) | function getPublishedVersions(packageJson, version, tag) {
  function getChangedFilesInCommit (line 201) | function getChangedFilesInCommit(commit) {
  function updateWebsite (line 209) | function updateWebsite() {
  function log (line 221) | function log(message, color) {

FILE: bin/test_integration.js
  function npmBinScript (line 45) | function npmBinScript(script) {
  function run (line 50) | async function run() {

FILE: bin/test_mousemodes.js
  function evalButtonCode (line 77) | function evalButtonCode(code) {
  constant PROTOCOLS (line 107) | const PROTOCOLS = {
  constant ENC (line 116) | const ENC = {
  function printMenu (line 179) | function printMenu() {
  function switchActiveProtocol (line 196) | function switchActiveProtocol() {
  function switchActiveEnc (line 202) | function switchActiveEnc() {
  function activate (line 208) | function activate() {
  function applyReportData (line 218) | function applyReportData(data) {

FILE: bin/test_unit.js
  constant COVERAGE_LINES_THRESHOLD (line 9) | const COVERAGE_LINES_THRESHOLD = 40;
  function npmBinScript (line 68) | function npmBinScript(script) {

FILE: bin/vs_base_find_unused.js
  function findUnusedSymbols (line 7) | function findUnusedSymbols(

FILE: demo/client/client.ts
  type IWindowWithTerminal (line 46) | interface IWindowWithTerminal extends Window {
  function setPadding (line 121) | function setPadding(): void {
  function getSearchOptions (line 126) | function getSearchOptions(): ISearchOptions {
  function createTerminal (line 279) | function createTerminal(): Terminal {
  function runRealTerminal (line 400) | function runRealTerminal(): void {
  function runFakeTerminal (line 407) | function runFakeTerminal(): void {
  function updateTerminalContainerBackground (line 442) | function updateTerminalContainerBackground(): void {
  function initAddons (line 450) | function initAddons(term: Terminal): void {
  function updateFindResults (line 604) | function updateFindResults(e: { resultIndex: number, resultCount: number...
  function addDomListener (line 614) | function addDomListener(element: HTMLElement, type: string, handler: (.....
  function updateTerminalSize (line 619) | function updateTerminalSize(): void {
  function getBox (line 634) | function getBox(width: number, height: number): any {

FILE: demo/client/components/controlBar.ts
  type ITabConfig (line 8) | interface ITabConfig {
  type IControlWindow (line 13) | interface IControlWindow {
  class ControlBar (line 20) | class ControlBar {
    method constructor (line 31) | constructor(sidebar: HTMLElement, tabContainer: HTMLElement, tabs: ITa...
    method _initResizeListeners (line 54) | private _initResizeListeners(): void {
    method _startResize (line 79) | private _startResize(mode: 'horizontal' | 'vertical' | 'corner', e: Mo...
    method _initTabs (line 86) | private _initTabs(tabs: ITabConfig[]): void {
    method _openSection (line 119) | private _openSection(event: MouseEvent, tabId: string): void {
    method _activateTab (line 135) | private _activateTab(tabId: string): void {
    method registerWindow (line 152) | public registerWindow<T extends IControlWindow>(window: T, options?: {...
    method setTabVisible (line 197) | public setTabVisible(tabId: string, visible: boolean): void {
    method activeTabId (line 213) | public get activeTabId(): string | null {
    method activateDefaultTab (line 217) | public activateDefaultTab(): void {

FILE: demo/client/components/window/addonImageWindow.ts
  class AddonImageWindow (line 10) | class AddonImageWindow extends BaseWindow implements IControlWindow {
    method build (line 18) | public build(container: HTMLElement): void {
    method imageStorageLimitInput (line 82) | public get imageStorageLimitInput(): HTMLInputElement {
    method imageShowPlaceholderCheckbox (line 86) | public get imageShowPlaceholderCheckbox(): HTMLInputElement {
    method imageOptionsTextarea (line 90) | public get imageOptionsTextarea(): HTMLTextAreaElement {
    method _addDdWithButton (line 94) | private _addDdWithButton(dl: HTMLElement, id: string, label: string): ...
    method _initImageAddonExposed (line 103) | private _initImageAddonExposed(): void {
    method _addDomListener (line 191) | private _addDomListener(element: HTMLElement, type: string, handler: (...

FILE: demo/client/components/window/addonLigaturesWindow.ts
  class AddonLigaturesWindow (line 9) | class AddonLigaturesWindow extends BaseWindow implements IControlWindow {
    method build (line 13) | public build(container: HTMLElement): void {
    method _ligaturesTest (line 31) | private _ligaturesTest(): void {

FILE: demo/client/components/window/addonProgressWindow.ts
  class AddonProgressWindow (line 10) | class AddonProgressWindow extends BaseWindow implements IControlWindow {
    method build (line 14) | public build(container: HTMLElement): void {
    method _addDdWithButton (line 52) | private _addDdWithButton(dl: HTMLElement, id: string, label: string, t...
    method _initProgress (line 64) | private _initProgress(): void {
    method _addProgressStyles (line 103) | private _addProgressStyles(container: HTMLElement): void {

FILE: demo/client/components/window/addonSearchWindow.ts
  class AddonSearchWindow (line 9) | class AddonSearchWindow extends BaseWindow implements IControlWindow {
    method build (line 21) | public build(container: HTMLElement): void {
    method findNextInput (line 90) | public get findNextInput(): HTMLInputElement {
    method findPreviousInput (line 94) | public get findPreviousInput(): HTMLInputElement {
    method findResultsSpan (line 98) | public get findResultsSpan(): HTMLElement {

FILE: demo/client/components/window/addonSerializeWindow.ts
  class AddonSerializeWindow (line 9) | class AddonSerializeWindow extends BaseWindow implements IControlWindow {
    method build (line 18) | public build(container: HTMLElement): void {
    method _serializeButtonHandler (line 66) | private _serializeButtonHandler(): void {
    method _htmlSerializeButtonHandler (line 77) | private _htmlSerializeButtonHandler(): void {

FILE: demo/client/components/window/addonWebFontsWindow.ts
  class AddonWebFontsWindow (line 10) | class AddonWebFontsWindow extends BaseWindow implements IControlWindow {
    method build (line 14) | public build(container: HTMLElement): void {

FILE: demo/client/components/window/addonWebLinksWindow.ts
  class AddonWebLinksWindow (line 9) | class AddonWebLinksWindow extends BaseWindow implements IControlWindow {
    method build (line 13) | public build(container: HTMLElement): void {
    method _testWeblinks (line 31) | private _testWeblinks(): void {

FILE: demo/client/components/window/addonsWindow.ts
  class AddonsWindow (line 9) | class AddonsWindow extends BaseWindow implements IControlWindow {
    method build (line 15) | public build(container: HTMLElement): void {
    method addonsContainer (line 27) | public get addonsContainer(): HTMLElement {

FILE: demo/client/components/window/baseWindow.ts
  method _terminal (line 11) | protected get _terminal(): Terminal { return this._terminalPrivate; }
  method constructor (line 13) | constructor(
  method setTerminal (line 20) | public setTerminal(terminal: Terminal): void {

FILE: demo/client/components/window/cellInspectorWindow.ts
  type UnderlineStyle (line 11) | const enum UnderlineStyle {
  type IAttributeDataInternal (line 21) | interface IAttributeDataInternal {
  class CellInspectorWindow (line 29) | class CellInspectorWindow extends BaseWindow implements IControlWindow {
    method build (line 42) | public build(container: HTMLElement): void {
    method _addRow (line 63) | private _addRow(dl: HTMLElement, label: string): HTMLElement {
    method _setupMouseListener (line 78) | private _setupMouseListener(): void {
    method _clearDisplay (line 118) | private _clearDisplay(): void {
    method _updateDisplay (line 128) | private _updateDisplay(x: number, y: number, bufferY: number, cell: IB...
    method _formatFgColor (line 196) | private _formatFgColor(color: number, isDefault: boolean, isPalette: b...
    method _formatBgColor (line 221) | private _formatBgColor(color: number, isDefault: boolean, isPalette: b...
    method _getUnderlineStyleName (line 246) | private _getUnderlineStyleName(style: UnderlineStyle): string {
    method _formatUnderlineColor (line 258) | private _formatUnderlineColor(color: number, isPalette: boolean, isRGB...

FILE: demo/client/components/window/gpuWindow.ts
  class GpuWindow (line 9) | class GpuWindow extends BaseWindow implements IControlWindow {
    method build (line 15) | public build(container: HTMLElement): void {
    method setTextureAtlas (line 31) | public setTextureAtlas(canvas: HTMLCanvasElement): void {
    method appendTextureAtlas (line 36) | public appendTextureAtlas(canvas: HTMLCanvasElement): void {
    method removeTextureAtlas (line 41) | public removeTextureAtlas(canvas: HTMLCanvasElement): void {
    method _styleAtlasPage (line 45) | private _styleAtlasPage(canvas: HTMLCanvasElement): void {

FILE: demo/client/components/window/optionsWindow.ts
  class OptionsWindow (line 79) | class OptionsWindow extends BaseWindow implements IControlWindow {
    method constructor (line 87) | constructor(
    method build (line 98) | public build(container: HTMLElement): void {
    method initOptions (line 110) | public initOptions(addDomListener: (el: HTMLElement, type: string, han...
    method autoResize (line 269) | public get autoResize(): boolean {
    method autoResize (line 273) | public set autoResize(value: boolean) {
    method _getTheme (line 277) | private _getTheme(): ITheme {

FILE: demo/client/components/window/styleWindow.ts
  class StyleWindow (line 9) | class StyleWindow extends BaseWindow implements IControlWindow {
    method build (line 15) | public build(container: HTMLElement): void {
    method paddingElement (line 33) | public get paddingElement(): HTMLInputElement {

FILE: demo/client/components/window/testWindow.ts
  class TestWindow (line 12) | class TestWindow extends BaseWindow implements IControlWindow {
    method constructor (line 16) | constructor(
    method build (line 27) | public build(container: HTMLElement): void {
    method _addDt (line 76) | private _addDt(dl: HTMLElement, text: string): void {
    method _addDdWithButton (line 82) | private _addDdWithButton(dl: HTMLElement, id: string, label: string, t...
    method _addDdWithCheckbox (line 97) | private _addDdWithCheckbox(dl: HTMLElement, id: string, label: string,...
  function addCjk (line 119) | function addCjk(term: Terminal): void {
  function addCjkRandomSgr (line 129) | function addCjkRandomSgr(term: Terminal): void {
  function getRandomSgr (line 141) | function getRandomSgr(): string {
  function powerlineSymbolTest (line 145) | function powerlineSymbolTest(term: Terminal): void {
  function nerdFontIconsTest (line 219) | function nerdFontIconsTest(term: Terminal): void {
  function underlineTest (line 265) | function underlineTest(term: Terminal): void {
  function customGlyphAlignmentHandler (line 322) | function customGlyphAlignmentHandler(term: Terminal): void {
  function customGlyphRangesHandler (line 437) | function customGlyphRangesHandler(term: Terminal): void {
  function ansiColorsTest (line 523) | function ansiColorsTest(term: Terminal): void {
  function writeTestString (line 548) | function writeTestString(): string {
  function sgrTest (line 561) | function sgrTest(term: Terminal): void {
  function addAnsiHyperlink (line 628) | function addAnsiHyperlink(term: Terminal): void {
  function addGraphemeClusters (line 648) | function addGraphemeClusters(term: Terminal): void {
  function coloredErase (line 666) | function coloredErase(term: Terminal): void {
  function loadTest (line 681) | function loadTest(term: Terminal, addons: AddonCollection): void {
  function loadTestLongLines (line 714) | async function loadTestLongLines(term: Terminal, addons: AddonCollection...
  function addDecoration (line 754) | function addDecoration(term: Terminal, dim: number = 1): void {
  function addOverviewRuler (line 771) | function addOverviewRuler(term: Terminal): void {
  function decorationStressTest (line 784) | function decorationStressTest(term: Terminal): void {

FILE: demo/client/components/window/vtWindow.ts
  class VtWindow (line 9) | class VtWindow extends BaseWindow implements IControlWindow {
    method build (line 15) | public build(container: HTMLElement): void {
    method _createButton (line 52) | private _createButton(name: string, description: string, writeCsi: str...
    method _csi (line 77) | private _csi(e: string): string {

FILE: demo/client/components/window/webglWindow.ts
  class WebglWindow (line 9) | class WebglWindow extends BaseWindow implements IControlWindow {
    method build (line 15) | public build(container: HTMLElement): void {
    method setTextureAtlas (line 31) | public setTextureAtlas(canvas: HTMLCanvasElement): void {
    method appendTextureAtlas (line 36) | public appendTextureAtlas(canvas: HTMLCanvasElement): void {
    method removeTextureAtlas (line 41) | public removeTextureAtlas(canvas: HTMLCanvasElement): void {
    method _styleAtlasPage (line 45) | private _styleAtlasPage(canvas: HTMLCanvasElement): void {

FILE: demo/client/types.ts
  type AddonType (line 22) | type AddonType = 'attach' | 'clipboard' | 'fit' | 'image' | 'ligatures' ...
  type IDemoAddon (line 24) | interface IDemoAddon<T extends AddonType> {
  type AddonCollection (line 61) | type AddonCollection = { [T in AddonType]: IDemoAddon<T> };

FILE: demo/client/unicodeTable.ts
  type UnicodeRangeDefinition (line 8) | type UnicodeRangeDefinition = [
  function writeUnicodeTable (line 20) | function writeUnicodeTable(term: Terminal, name: string, start: number, ...

FILE: demo/server/server.ts
  type IDisposable (line 14) | interface IDisposable {
  constant USE_BINARY (line 19) | const USE_BINARY = os.platform() !== 'win32';
  function startServer (line 23) | function startServer(): void {

FILE: fixtures/escape_sequence_files/run_tests.py
  function enable_echo (line 10) | def enable_echo(fd, enabled):
  function log (line 24) | def log(append=False, *s):
  function reset_terminal (line 31) | def reset_terminal():
  function test (line 36) | def test():

FILE: src/browser/AccessibilityManager.ts
  constant MAX_ROWS_TO_READ (line 15) | const MAX_ROWS_TO_READ = 20;
  type BoundaryPosition (line 17) | const enum BoundaryPosition {
  constant DEBUG (line 24) | const DEBUG = false;
  class AccessibilityManager (line 26) | class AccessibilityManager extends Disposable {
    method constructor (line 54) | constructor(
    method _handleTab (line 133) | private _handleTab(spaceCount: number): void {
    method _handleChar (line 139) | private _handleChar(char: string): void {
    method _clearLiveRegion (line 160) | private _clearLiveRegion(): void {
    method _handleKey (line 165) | private _handleKey(keyChar: string): void {
    method _refreshRows (line 173) | private _refreshRows(start?: number, end?: number): void {
    method _renderRows (line 177) | private _renderRows(start: number, end: number): void {
    method _announceCharacters (line 202) | private _announceCharacters(): void {
    method _handleBoundaryFocus (line 213) | private _handleBoundaryFocus(e: FocusEvent, position: BoundaryPosition...
    method _handleSelectionChange (line 273) | private _handleSelectionChange(): void {
    method _handleResize (line 370) | private _handleResize(rows: number): void {
    method _createAccessibilityTreeNode (line 390) | private _createAccessibilityTreeNode(): HTMLElement {
    method _refreshRowsDimensions (line 398) | private _refreshRowsDimensions(): void {
    method _refreshRowDimensions (line 415) | private _refreshRowDimensions(element: HTMLElement): void {
    method _alignRowWidth (line 428) | private _alignRowWidth(element: HTMLElement): void {

FILE: src/browser/Clipboard.ts
  function prepareTextForTerminal (line 13) | function prepareTextForTerminal(text: string): string {
  function bracketTextForPaste (line 21) | function bracketTextForPaste(text: string, bracketedPasteMode: boolean):...
  function copyHandler (line 35) | function copyHandler(ev: ClipboardEvent, selectionService: ISelectionSer...
  function handlePasteEvent (line 46) | function handlePasteEvent(ev: ClipboardEvent, textarea: HTMLTextAreaElem...
  function paste (line 54) | function paste(text: string, textarea: HTMLTextAreaElement, coreService:...
  function moveTextAreaUnderMouseCursor (line 66) | function moveTextAreaUnderMouseCursor(ev: MouseEvent, textarea: HTMLText...
  function rightClickHandler (line 86) | function rightClickHandler(ev: MouseEvent, textarea: HTMLTextAreaElement...

FILE: src/browser/ColorContrastCache.ts
  class ColorContrastCache (line 10) | class ColorContrastCache implements IColorContrastCache {
    method setCss (line 14) | public setCss(bg: number, fg: number, value: string | null): void {
    method getCss (line 18) | public getCss(bg: number, fg: number): string | null | undefined {
    method setColor (line 22) | public setColor(bg: number, fg: number, value: IColor | null): void {
    method getColor (line 26) | public getColor(bg: number, fg: number): IColor | null | undefined {
    method clear (line 30) | public clear(): void {

FILE: src/browser/CoreBrowserTerminal.ts
  class CoreBrowserTerminal (line 63) | class CoreBrowserTerminal extends CoreTerminal implements ITerminal {
    method linkifier (line 74) | public get linkifier(): ILinkifier2 | undefined { return this._linkifi...
    method onFocus (line 139) | public get onFocus(): IEvent<void> { return this._onFocus.event; }
    method onBlur (line 141) | public get onBlur(): IEvent<void> { return this._onBlur.event; }
    method onA11yChar (line 143) | public get onA11yChar(): IEvent<string> { return this._onA11yCharEmitt...
    method onA11yTab (line 145) | public get onA11yTab(): IEvent<number> { return this._onA11yTabEmitter...
    method onWillOpen (line 147) | public get onWillOpen(): IEvent<HTMLElement> { return this._onWillOpen...
    method dimensions (line 151) | public get dimensions(): IRenderDimensionsApi | undefined {
    method constructor (line 169) | constructor(
    method _handleColorEvent (line 211) | private _handleColorEvent(event: IColorEvent): void {
    method _reportColorScheme (line 261) | private _reportColorScheme(): void {
    method _setup (line 270) | protected _setup(): void {
    method buffer (line 279) | public get buffer(): IBuffer {
    method focus (line 286) | public focus(): void {
    method _handleScreenReaderModeOptionChange (line 292) | private _handleScreenReaderModeOptionChange(value: boolean): void {
    method _handleTextAreaFocus (line 305) | private _handleTextAreaFocus(ev: FocusEvent): void {
    method blur (line 318) | public blur(): void {
    method _handleTextAreaBlur (line 325) | private _handleTextAreaBlur(): void {
    method _syncTextArea (line 337) | private _syncTextArea(): void {
    method _initGlobal (line 366) | private _initGlobal(): void {
    method _bindKeys (line 413) | private _bindKeys(): void {
    method open (line 438) | public open(parent: HTMLElement): void {
    method _createRenderer (line 664) | private _createRenderer(): IRenderer {
    method refresh (line 674) | public refresh(start: number, end: number, sync: boolean = false): void {
    method updateCursorStyle (line 681) | public updateCursorStyle(ev: KeyboardEvent | MouseEvent): void {
    method _showCursor (line 692) | private _showCursor(): void {
    method scrollLines (line 699) | public scrollLines(disp: number, suppressScrollEvent?: boolean): void {
    method scrollPages (line 709) | public scrollPages(pageCount: number): void {
    method scrollToTop (line 713) | public scrollToTop(): void {
    method scrollToBottom (line 717) | public scrollToBottom(disableSmoothScroll?: boolean): void {
    method scrollToLine (line 725) | public scrollToLine(line: number): void {
    method paste (line 732) | public paste(data: string): void {
    method attachCustomKeyEventHandler (line 736) | public attachCustomKeyEventHandler(customKeyEventHandler: CustomKeyEve...
    method attachCustomWheelEventHandler (line 740) | public attachCustomWheelEventHandler(customWheelEventHandler: CustomWh...
    method registerLinkProvider (line 744) | public registerLinkProvider(linkProvider: ILinkProvider): IDisposable {
    method registerCharacterJoiner (line 748) | public registerCharacterJoiner(handler: CharacterJoinerHandler): number {
    method deregisterCharacterJoiner (line 757) | public deregisterCharacterJoiner(joinerId: number): void {
    method markers (line 766) | public get markers(): IMarker[] {
    method registerMarker (line 770) | public registerMarker(cursorYOffset: number): IMarker {
    method registerDecoration (line 774) | public registerDecoration(decorationOptions: IDecorationOptions): IDec...
    method hasSelection (line 781) | public hasSelection(): boolean {
    method select (line 791) | public select(column: number, row: number, length: number): void {
    method getSelection (line 799) | public getSelection(): string {
    method getSelectionPosition (line 803) | public getSelectionPosition(): IBufferRange | undefined {
    method clearSelection (line 823) | public clearSelection(): void {
    method selectAll (line 830) | public selectAll(): void {
    method selectLines (line 834) | public selectLines(start: number, end: number): void {
    method _keyDown (line 843) | protected _keyDown(event: KeyboardEvent): boolean | undefined {
    method _isThirdLevelShift (line 934) | private _isThirdLevelShift(browser: IBrowser, ev: KeyboardEvent): bool...
    method _keyUp (line 948) | protected _keyUp(ev: KeyboardEvent): void {
    method _keyPress (line 976) | protected _keyPress(ev: KeyboardEvent): boolean {
    method _inputEvent (line 1026) | protected _inputEvent(ev: InputEvent): boolean {
    method resize (line 1053) | public resize(x: number, y: number): void {
    method _afterResize (line 1065) | private _afterResize(x: number, y: number): void {
    method clear (line 1072) | public clear(): void {
    method reset (line 1100) | public reset(): void {
    method clearTextureAtlas (line 1122) | public clearTextureAtlas(): void {
    method _reportFocus (line 1126) | private _reportFocus(): void {
    method _reportWindowsOptions (line 1134) | private _reportWindowsOptions(type: WindowsOptionsReportType): void {
  function wasModifierKeyOnlyEvent (line 1159) | function wasModifierKeyOnlyEvent(ev: KeyboardEvent): boolean {

FILE: src/browser/Dom.ts
  function getWindow (line 11) | function getWindow(e: Node | UIEvent | undefined | null): Window {
  class DomListener (line 25) | class DomListener implements IDisposable {
    method constructor (line 31) | constructor(node: EventTarget, type: string, handler: (e: any) => void...
    method dispose (line 39) | public dispose(): void {
  function addDisposableListener (line 52) | function addDisposableListener(node: EventTarget, type: string, handler:...
  function addStandardDisposableListener (line 56) | function addStandardDisposableListener(node: HTMLElement, type: string, ...
  function getDomNodePagePosition (line 78) | function getDomNodePagePosition(domNode: HTMLElement): { left: number, t...
  class AnimationFrameQueueItem (line 89) | class AnimationFrameQueueItem implements IDisposable {
    method constructor (line 92) | constructor(private readonly _runner: () => void, public priority: num...
    method dispose (line 95) | public dispose(): void {
    method execute (line 99) | public execute(): void {
    method sort (line 110) | public static sort(a: AnimationFrameQueueItem, b: AnimationFrameQueueI...
  type IWindowAnimationFrameState (line 115) | interface IWindowAnimationFrameState {
  function getAnimationFrameState (line 124) | function getAnimationFrameState(targetWindow: Window): IWindowAnimationF...
  function animationFrameRunner (line 138) | function animationFrameRunner(targetWindow: Window): void {
  function scheduleAtNextAnimationFrame (line 154) | function scheduleAtNextAnimationFrame(targetWindow: Window, runner: () =...
  class WindowIntervalTimer (line 167) | class WindowIntervalTimer extends IntervalTimer {
    method constructor (line 170) | constructor(node?: Node) {
    method cancelAndSet (line 175) | public cancelAndSet(runner: () => void, interval: number, targetWindow...

FILE: src/browser/Linkifier.test.ts
  class TestLinkifier2 (line 14) | class TestLinkifier2 extends Linkifier {
    method currentLink (line 15) | public set currentLink(link: any) {
    method linkHover (line 19) | public linkHover(element: HTMLElement, link: ILink, event: MouseEvent)...
    method linkLeave (line 23) | public linkLeave(element: HTMLElement, link: ILink, event: MouseEvent)...

FILE: src/browser/Linkifier.ts
  class Linkifier (line 14) | class Linkifier extends Disposable implements ILinkifier2 {
    method currentLink (line 15) | public get currentLink(): ILinkWithState | undefined { return this._cu...
    method constructor (line 31) | constructor(
    method _handleMouseMove (line 60) | private _handleMouseMove(event: MouseEvent): void {
    method _handleHover (line 89) | private _handleHover(position: IBufferCellPosition): void {
    method _askForLink (line 108) | private _askForLink(position: IBufferCellPosition, useLineCache: boole...
    method _removeIntersectingLinks (line 153) | private _removeIntersectingLinks(y: number, replies: Map<Number, ILink...
    method _checkLinkProviderResult (line 175) | private _checkLinkProviderResult(index: number, position: IBufferCellP...
    method _handleMouseDown (line 216) | private _handleMouseDown(): void {
    method _handleMouseUp (line 220) | private _handleMouseUp(event: MouseEvent): void {
    method _clearCurrentLink (line 235) | private _clearCurrentLink(startRow?: number, endRow?: number): void {
    method _handleNewLink (line 249) | private _handleNewLink(linkWithState: ILinkWithState): void {
    method _linkHover (line 325) | protected _linkHover(element: HTMLElement, link: ILink, event: MouseEv...
    method _fireUnderlineEvent (line 341) | private _fireUnderlineEvent(link: ILink, showEvent: boolean): void {
    method _linkLeave (line 349) | protected _linkLeave(element: HTMLElement, link: ILink, event: MouseEv...
    method _linkAtPosition (line 370) | private _linkAtPosition(link: ILink, position: IBufferCellPosition): b...
    method _positionFromMouseEvent (line 381) | private _positionFromMouseEvent(event: MouseEvent, element: HTMLElemen...
    method _createLinkUnderlineEvent (line 390) | private _createLinkUnderlineEvent(x1: number, y1: number, x2: number, ...
  function linkEquals (line 395) | function linkEquals(a: ILink, b: ILink): boolean {

FILE: src/browser/OscLinkProvider.ts
  class OscLinkProvider (line 11) | class OscLinkProvider implements ILinkProvider {
    method constructor (line 14) | constructor(
    method provideLinks (line 21) | public provideLinks(y: number, callback: (links: ILink[] | undefined) ...
  function defaultActivate (line 116) | function defaultActivate(e: MouseEvent, uri: string): void {

FILE: src/browser/RenderDebouncer.ts
  class RenderDebouncer (line 12) | class RenderDebouncer implements IRenderDebouncerWithCallback {
    method constructor (line 19) | constructor(
    method dispose (line 25) | public dispose(): void {
    method addRefreshCallback (line 32) | public addRefreshCallback(callback: FrameRequestCallback): number {
    method refresh (line 40) | public refresh(rowStart: number | undefined, rowEnd: number | undefine...
    method _innerRefresh (line 56) | private _innerRefresh(): void {
    method _runRefreshCallbacks (line 78) | private _runRefreshCallbacks(): void {

FILE: src/browser/Terminal.test.ts
  constant INIT_COLS (line 14) | const INIT_COLS = 80;
  constant INIT_ROWS (line 15) | const INIT_ROWS = 24;

FILE: src/browser/Terminal2.test.ts
  constant COLS (line 14) | const COLS = 80;
  constant ROWS (line 15) | const ROWS = 25;
  constant TESTFILES (line 18) | const TESTFILES = fs.readdirSync(escapeSequenceFilesDir)
  constant SKIP_FILES (line 21) | const SKIP_FILES = [
  constant FILES (line 38) | const FILES = TESTFILES.filter(value => !SKIP_FILES.includes(path.basena...
  function formatError (line 107) | function formatError(input: string, output: string, expected: string): s...
  function terminalToString (line 126) | function terminalToString(term: CoreBrowserTerminal): string {

FILE: src/browser/TestUtils.test.ts
  class TestTerminal (line 23) | class TestTerminal extends CoreBrowserTerminal {
    method curAttrData (line 24) | public get curAttrData(): IAttributeData { return (this as any)._input...
    method keyDown (line 25) | public keyDown(ev: any): boolean | undefined { return this._keyDown(ev...
    method keyPress (line 26) | public keyPress(ev: any): boolean { return this._keyPress(ev); }
    method writeP (line 27) | public writeP(data: string | Uint8Array): Promise<void> {
  class MockTerminal (line 32) | class MockTerminal implements ITerminal {
    method registerMarker (line 58) | public registerMarker(cursorYOffset: number): IMarker {
    method selectLines (line 61) | public selectLines(start: number, end: number): void {
    method scrollToLine (line 64) | public scrollToLine(line: number): void {
    method setOption (line 68) | public setOption(key: any, value: any): void {
    method blur (line 71) | public blur(): void {
    method focus (line 74) | public focus(): void {
    method input (line 77) | public input(data: string, wasUserInput: boolean = true): void {
    method resize (line 80) | public resize(columns: number, rows: number): void {
    method writeln (line 83) | public writeln(data: string): void {
    method paste (line 86) | public paste(data: string): void {
    method open (line 89) | public open(parent: HTMLElement): void {
    method attachCustomKeyEventHandler (line 92) | public attachCustomKeyEventHandler(customKeyEventHandler: (event: Keyb...
    method attachCustomWheelEventHandler (line 95) | public attachCustomWheelEventHandler(customWheelEventHandler: (event: ...
    method registerCsiHandler (line 98) | public registerCsiHandler(id: IFunctionIdentifier, callback: (params: ...
    method registerDcsHandler (line 101) | public registerDcsHandler(id: IFunctionIdentifier, callback: (data: st...
    method registerEscHandler (line 104) | public registerEscHandler(id: IFunctionIdentifier, handler: () => bool...
    method registerOscHandler (line 107) | public registerOscHandler(ident: number, callback: (data: string) => b...
    method registerApcHandler (line 110) | public registerApcHandler(ident: number, callback: (data: string) => b...
    method registerLinkProvider (line 113) | public registerLinkProvider(linkProvider: ILinkProvider): IDisposable {
    method registerDecoration (line 116) | public registerDecoration(decorationOptions: IDecorationOptions): IDec...
    method hasSelection (line 119) | public hasSelection(): boolean {
    method getSelection (line 122) | public getSelection(): string {
    method getSelectionPosition (line 125) | public getSelectionPosition(): IBufferRange | undefined {
    method clearSelection (line 128) | public clearSelection(): void {
    method select (line 131) | public select(column: number, row: number, length: number): void {
    method selectAll (line 134) | public selectAll(): void {
    method dispose (line 137) | public dispose(): void {
    method scrollPages (line 140) | public scrollPages(pageCount: number): void {
    method scrollToTop (line 143) | public scrollToTop(): void {
    method scrollToBottom (line 146) | public scrollToBottom(): void {
    method clear (line 149) | public clear(): void {
    method write (line 152) | public write(data: string): void {
    method getBufferElements (line 155) | public getBufferElements(startLine: number, endLine?: number | undefin...
    method registerBufferElementProvider (line 158) | public registerBufferElementProvider(bufferProvider: IBufferElementPro...
    method handler (line 183) | public handler(data: string): void {
    method on (line 186) | public on(event: string, callback: (...args: any[]) => void): void {
    method off (line 189) | public off(type: string, listener: XtermListener): void {
    method addDisposableListener (line 192) | public addDisposableListener(type: string, handler: XtermListener): ID...
    method scrollLines (line 195) | public scrollLines(disp: number): void {
    method scrollToRow (line 198) | public scrollToRow(absoluteRow: number): number {
    method log (line 201) | public log(text: string): void {
    method emit (line 204) | public emit(event: string, data: any): void {
    method reset (line 207) | public reset(): void {
    method clearTextureAtlas (line 210) | public clearTextureAtlas(): void {
    method refresh (line 213) | public refresh(start: number, end: number): void {
    method registerCharacterJoiner (line 216) | public registerCharacterJoiner(handler: CharacterJoinerHandler): numbe...
    method deregisterCharacterJoiner (line 217) | public deregisterCharacterJoiner(joinerId: number): void { }
  class MockBuffer (line 220) | class MockBuffer implements IBuffer {
    method addMarker (line 222) | public addMarker(y: number): IMarker {
    method translateBufferLineToString (line 243) | public translateBufferLineToString(lineIndex: number, trimRight: boole...
    method getWrappedRangeForLine (line 246) | public getWrappedRangeForLine(y: number): { first: number, last: numbe...
    method nextStop (line 249) | public nextStop(x?: number): number {
    method prevStop (line 252) | public prevStop(x?: number): number {
    method setLines (line 255) | public setLines(lines: ICircularList<IBufferLine>): void {
    method getBlankLine (line 258) | public getBlankLine(attr: IAttributeData, isWrapped?: boolean): IBuffe...
    method getNullCell (line 261) | public getNullCell(attr?: IAttributeData): ICellData {
    method getWhitespaceCell (line 264) | public getWhitespaceCell(attr?: IAttributeData): ICellData {
    method clearMarkers (line 267) | public clearMarkers(y: number): void {
    method clearAllMarkers (line 270) | public clearAllMarkers(): void {
  class MockRenderer (line 275) | class MockRenderer implements IRenderer {
    method dispose (line 279) | public dispose(): void {
    method on (line 282) | public on(type: string, listener: XtermListener): void {
    method off (line 285) | public off(type: string, listener: XtermListener): void {
    method emit (line 288) | public emit(type: string, data?: any): void {
    method addDisposableListener (line 291) | public addDisposableListener(type: string, handler: XtermListener): ID...
    method registerDecoration (line 295) | public registerDecoration(decorationOptions: IDecorationOptions): IDec...
    method handleResize (line 298) | public handleResize(cols: number, rows: number): void { }
    method handleCharSizeChanged (line 299) | public handleCharSizeChanged(): void { }
    method handleBlur (line 300) | public handleBlur(): void { }
    method handleFocus (line 301) | public handleFocus(): void { }
    method handleSelectionChanged (line 302) | public handleSelectionChanged(start: [number, number], end: [number, n...
    method handleCursorMove (line 303) | public handleCursorMove(): void { }
    method handleOptionsChanged (line 304) | public handleOptionsChanged(): void { }
    method handleDevicePixelRatioChange (line 305) | public handleDevicePixelRatioChange(): void { }
    method clear (line 306) | public clear(): void { }
    method renderRows (line 307) | public renderRows(start: number, end: number): void { }
  class MockViewport (line 310) | class MockViewport implements IViewport {
    method dispose (line 313) | public dispose(): void {
    method handleThemeChange (line 317) | public handleThemeChange(colors: IColorSet): void {
    method handleWheel (line 320) | public handleWheel(ev: WheelEvent): boolean {
    method handleTouchStart (line 323) | public handleTouchStart(ev: TouchEvent): void {
    method handleTouchMove (line 326) | public handleTouchMove(ev: TouchEvent): boolean {
    method syncScrollArea (line 329) | public syncScrollArea(): void { }
    method getLinesScrolled (line 330) | public getLinesScrolled(ev: WheelEvent): number {
    method getBufferElements (line 333) | public getBufferElements(startLine: number, endLine?: number | undefin...
    method scrollLines (line 336) | public scrollLines(disp: number): void {
    method reset (line 339) | public reset(): void {
  class MockCompositionHelper (line 343) | class MockCompositionHelper implements ICompositionHelper {
    method isComposing (line 344) | public get isComposing(): boolean {
    method compositionstart (line 347) | public compositionstart(): void {
    method compositionupdate (line 350) | public compositionupdate(ev: CompositionEvent): void {
    method compositionend (line 353) | public compositionend(): void {
    method updateCompositionElements (line 356) | public updateCompositionElements(dontRecurse?: boolean): void {
    method keydown (line 359) | public keydown(ev: KeyboardEvent): boolean {
  class MockCoreBrowserService (line 364) | class MockCoreBrowserService implements ICoreBrowserService {
    method window (line 369) | public get window(): Window & typeof globalThis {
    method mainDocument (line 372) | public get mainDocument(): Document {
  class MockCharSizeService (line 378) | class MockCharSizeService implements ICharSizeService {
    method hasValidSize (line 380) | public get hasValidSize(): boolean { return this.width > 0 && this.hei...
    method constructor (line 382) | constructor(public width: number, public height: number) {}
    method measure (line 383) | public measure(): void {}
  class MockMouseService (line 386) | class MockMouseService implements IMouseService {
    method getCoords (line 388) | public getCoords(event: {clientX: number, clientY: number}, element: H...
    method getMouseReportCoords (line 392) | public getMouseReportCoords(event: MouseEvent, element: HTMLElement): ...
    method bindMouse (line 396) | public bindMouse(): void { }
    method reset (line 397) | public reset(): void { }
  class MockRenderService (line 400) | class MockRenderService implements IRenderService {
    method refreshRows (line 407) | public refreshRows(start: number, end: number): void {
    method addRefreshCallback (line 410) | public addRefreshCallback(callback: FrameRequestCallback): number {
    method clearTextureAtlas (line 413) | public clearTextureAtlas(): void {
    method resize (line 416) | public resize(cols: number, rows: number): void {
    method hasRenderer (line 419) | public hasRenderer(): boolean {
    method setRenderer (line 422) | public setRenderer(renderer: IRenderer): void {
    method handleDevicePixelRatioChange (line 425) | public handleDevicePixelRatioChange(): void {
    method handleResize (line 428) | public handleResize(cols: number, rows: number): void {
    method handleCharSizeChanged (line 431) | public handleCharSizeChanged(): void {
    method handleBlur (line 434) | public handleBlur(): void {
    method handleFocus (line 437) | public handleFocus(): void {
    method handleSelectionChanged (line 440) | public handleSelectionChanged(start: [number, number], end: [number, n...
    method handleCursorMove (line 443) | public handleCursorMove(): void {
    method clear (line 446) | public clear(): void {
    method dispose (line 449) | public dispose(): void {
    method registerDecoration (line 452) | public registerDecoration(decorationOptions: IDecorationOptions): IDec...
  class MockCharacterJoinerService (line 457) | class MockCharacterJoinerService implements ICharacterJoinerService {
    method register (line 459) | public register(handler: (text: string) => [number, number][]): number {
    method deregister (line 462) | public deregister(joinerId: number): boolean {
    method getJoinedCharacters (line 465) | public getJoinedCharacters(row: number): [number, number][] {
  class MockSelectionService (line 470) | class MockSelectionService implements ISelectionService {
    method disable (line 480) | public disable(): void {
    method enable (line 483) | public enable(): void {
    method reset (line 486) | public reset(): void {
    method setSelection (line 489) | public setSelection(row: number, col: number, length: number): void {
    method selectAll (line 492) | public selectAll(): void {
    method selectLines (line 495) | public selectLines(start: number, end: number): void {
    method clearSelection (line 498) | public clearSelection(): void {
    method rightClickSelect (line 501) | public rightClickSelect(event: MouseEvent): void {
    method shouldColumnSelect (line 504) | public shouldColumnSelect(event: MouseEvent | KeyboardEvent): boolean {
    method shouldForceSelection (line 507) | public shouldForceSelection(event: MouseEvent): boolean {
    method refresh (line 510) | public refresh(isLinuxMouseSelection?: boolean): void {
    method handleMouseDown (line 513) | public handleMouseDown(event: MouseEvent): void {
    method isCellInSelection (line 516) | public isCellInSelection(x: number, y: number): boolean {
  class MockThemeService (line 521) | class MockThemeService implements IThemeService{
    method restoreColor (line 524) | public restoreColor(slot?: ColorIndex | undefined): void {
    method modifyColors (line 527) | public modifyColors(callback: (colors: IColorSet) => void): void {

FILE: src/browser/TimeBasedDebouncer.ts
  constant RENDER_DEBOUNCE_THRESHOLD_MS (line 6) | const RENDER_DEBOUNCE_THRESHOLD_MS = 1000;
  class TimeBasedDebouncer (line 13) | class TimeBasedDebouncer implements IRenderDebouncer {
    method constructor (line 25) | constructor(
    method dispose (line 31) | public dispose(): void {
    method refresh (line 37) | public refresh(rowStart: number | undefined, rowEnd: number | undefine...
    method _innerRefresh (line 68) | private _innerRefresh(): void {

FILE: src/browser/Types.ts
  type InternalPassthroughApis (line 15) | type InternalPassthroughApis = Omit<ITerminalApi, 'buffer' | 'parser' | ...
  type ITerminal (line 17) | interface ITerminal extends InternalPassthroughApis, ICoreTerminal {
  type CustomKeyEventHandler (line 34) | type CustomKeyEventHandler = (event: KeyboardEvent) => boolean;
  type CustomWheelEventHandler (line 35) | type CustomWheelEventHandler = (event: WheelEvent) => boolean;
  type LineData (line 37) | type LineData = CharData[];
  type ICompositionHelper (line 39) | interface ICompositionHelper {
  type IBrowser (line 48) | interface IBrowser {
  type IColorSet (line 59) | interface IColorSet {
  type ReadonlyColorSet (line 81) | type ReadonlyColorSet = Readonly<Omit<IColorSet, 'ansi'>> & { ansi: Read...
  type IColorContrastCache (line 83) | interface IColorContrastCache {
  type IPartialColorSet (line 91) | interface IPartialColorSet {
  type IViewport (line 100) | interface IViewport extends IDisposable {
  type ILinkifierEvent (line 113) | interface ILinkifierEvent {
  type ILinkState (line 122) | interface ILinkState {
  type ILinkWithState (line 126) | interface ILinkWithState {
  type ILinkifier2 (line 131) | interface ILinkifier2 extends IDisposable {
  type ILink (line 137) | interface ILink {
  type ILinkDecorations (line 147) | interface ILinkDecorations {
  type IBufferRange (line 152) | interface IBufferRange {
  type IBufferCellPosition (line 157) | interface IBufferCellPosition {
  type CharacterJoinerHandler (line 162) | type CharacterJoinerHandler = (text: string) => [number, number][];
  type ICharacterJoiner (line 164) | interface ICharacterJoiner {
  type IRenderDebouncer (line 169) | interface IRenderDebouncer extends IDisposable {
  type IRenderDebouncerWithCallback (line 173) | interface IRenderDebouncerWithCallback extends IRenderDebouncer {
  type IBufferElementProvider (line 177) | interface IBufferElementProvider {
  constant DEFAULT_ANSI_COLORS (line 182) | const DEFAULT_ANSI_COLORS = Object.freeze((() => {

FILE: src/browser/Viewport.ts
  class Viewport (line 17) | class Viewport extends Disposable {
    method constructor (line 32) | constructor(
    method scrollLines (line 123) | public scrollLines(disp: number): void {
    method scrollToLine (line 131) | public scrollToLine(line: number, disableSmoothScroll?: boolean): void {
    method _getChangeOptions (line 141) | private _getChangeOptions(): IScrollableElementChangeOptions {
    method queueSync (line 156) | public queueSync(ydisp?: number): void {
    method _sync (line 172) | private _sync(ydisp: number = this._bufferService.buffer.ydisp): void {
    method _handleScroll (line 204) | private _handleScroll(e: IScrollEvent): void {
    method handleTouchScroll (line 221) | public handleTouchScroll(translationY: number): void {

FILE: src/browser/decorations/BufferDecorationRenderer.ts
  class BufferDecorationRenderer (line 10) | class BufferDecorationRenderer extends Disposable {
    method constructor (line 18) | constructor(
    method _queueRefresh (line 48) | private _queueRefresh(): void {
    method _doRefreshDecorations (line 58) | private _doRefreshDecorations(): void {
    method _renderDecoration (line 65) | private _renderDecoration(decoration: IInternalDecoration): void {
    method _createElement (line 72) | private _createElement(decoration: IInternalDecoration): HTMLElement {
    method _refreshStyle (line 91) | private _refreshStyle(decoration: IInternalDecoration): void {
    method _refreshXPosition (line 122) | private _refreshXPosition(decoration: IInternalDecoration, element: HT...
    method _removeDecoration (line 134) | private _removeDecoration(decoration: IInternalDecoration): void {

FILE: src/browser/decorations/ColorZoneStore.ts
  type IColorZoneStore (line 8) | interface IColorZoneStore {
  type IColorZone (line 19) | interface IColorZone {
  type IMinimalDecorationForColorZone (line 27) | interface IMinimalDecorationForColorZone {
  class ColorZoneStore (line 32) | class ColorZoneStore implements IColorZoneStore {
    method zones (line 48) | public get zones(): IColorZone[] {
    method clear (line 54) | public clear(): void {
    method addDecoration (line 59) | public addDecoration(decoration: IMinimalDecorationForColorZone): void {
    method setPadding (line 95) | public setPadding(padding: { [position: string]: number }): void {
    method _lineIntersectsZone (line 99) | private _lineIntersectsZone(zone: IColorZone, line: number): boolean {
    method _lineAdjacentToZone (line 106) | private _lineAdjacentToZone(zone: IColorZone, line: number, position: ...
    method _addLineToZone (line 113) | private _addLineToZone(zone: IColorZone, line: number): void {

FILE: src/browser/decorations/OverviewRulerRenderer.ts
  type Constants (line 11) | const enum Constants {
  class OverviewRulerRenderer (line 36) | class OverviewRulerRenderer extends Disposable {
    method _width (line 40) | private get _width(): number {
    method constructor (line 54) | constructor(
    method _refreshDrawConstants (line 100) | private _refreshDrawConstants(): void {
    method _refreshDrawHeightConstants (line 117) | private _refreshDrawHeightConstants(): void {
    method _refreshColorZonePadding (line 128) | private _refreshColorZonePadding(): void {
    method _refreshCanvasDimensions (line 138) | private _refreshCanvasDimensions(): void {
    method _refreshDecorations (line 149) | private _refreshDecorations(): void {
    method _renderRulerOutline (line 175) | private _renderRulerOutline(): void {
    method _renderColorZone (line 186) | private _renderColorZone(zone: IColorZone): void {
    method _queueRefresh (line 202) | private _queueRefresh(updateCanvasDimensions?: boolean, updateAnchor?:...

FILE: src/browser/input/CompositionHelper.ts
  type IPosition (line 10) | interface IPosition {
  class CompositionHelper (line 20) | class CompositionHelper {
    method isComposing (line 26) | public get isComposing(): boolean { return this._isComposing; }
    method constructor (line 55) | constructor(
    method compositionstart (line 73) | public compositionstart(): void {
    method compositionupdate (line 91) | public compositionupdate(ev: Pick<CompositionEvent, 'data'>): void {
    method compositionend (line 106) | public compositionend(): void {
    method keydown (line 115) | public keydown(ev: KeyboardEvent): boolean {
    method _finalizeComposition (line 149) | private _finalizeComposition(waitForPropagation: boolean): void {
    method _handleAnyTextareaChanges (line 212) | private _handleAnyTextareaChanges(): void {
    method updateCompositionElements (line 245) | public updateCompositionElements(dontRecurse?: boolean): void {

FILE: src/browser/input/Mouse.test.ts
  constant CHAR_WIDTH (line 10) | const CHAR_WIDTH = 10;
  constant CHAR_HEIGHT (line 11) | const CHAR_HEIGHT = 20;
  method getComputedStyle (line 19) | getComputedStyle(): any {

FILE: src/browser/input/Mouse.ts
  function getCoordsRelativeToElement (line 6) | function getCoordsRelativeToElement(window: Pick<Window, 'getComputedSty...
  function getCoords (line 33) | function getCoords(window: Pick<Window, 'getComputedStyle'>, event: Pick...

FILE: src/browser/input/MoveToCell.ts
  type Direction (line 9) | const enum Direction {
  function moveToCellSequence (line 21) | function moveToCellSequence(targetX: number, targetY: number, bufferServ...
  function colsFromRowBeginning (line 49) | function colsFromRowBeginning(currX: number, bufferService: IBufferServi...
  function colsFromRowEnd (line 56) | function colsFromRowEnd(currX: number, bufferService: IBufferService): n...
  function resetStartingRow (line 65) | function resetStartingRow(startX: number, startY: number, targetX: numbe...
  function moveToRequestedRow (line 79) | function moveToRequestedRow(startY: number, targetY: number, bufferServi...
  function moveToRequestedCol (line 91) | function moveToRequestedCol(startX: number, startY: number, targetX: num...
  function wrappedRowsCount (line 116) | function wrappedRowsCount(startY: number, targetY: number, bufferService...
  function wrappedRowsForRow (line 136) | function wrappedRowsForRow(currentRow: number, bufferService: IBufferSer...
  function horizontalDirection (line 157) | function horizontalDirection(startX: number, startY: number, targetX: nu...
  function verticalDirection (line 177) | function verticalDirection(startY: number, targetY: number): Direction {
  function bufferLine (line 190) | function bufferLine(
  function sequence (line 233) | function sequence(direction: Direction, applicationCursor: boolean): str...
  function repeat (line 244) | function repeat(count: number, str: string): string {

FILE: src/browser/public/Terminal.ts
  constant CONSTRUCTOR_ONLY_OPTIONS (line 21) | const CONSTRUCTOR_ONLY_OPTIONS = ['cols', 'rows'];
  class Terminal (line 25) | class Terminal extends Disposable implements ITerminalApi {
    method constructor (line 32) | constructor(options?: ITerminalOptions & ITerminalInitOnlyOptions) {
    method _checkReadonlyOptions (line 56) | private _checkReadonlyOptions(propName: string): void {
    method _checkProposedApi (line 65) | private _checkProposedApi(): void {
    method onBell (line 71) | public get onBell(): IEvent<void> { return this._core.onBell; }
    method onBinary (line 72) | public get onBinary(): IEvent<string> { return this._core.onBinary; }
    method onCursorMove (line 73) | public get onCursorMove(): IEvent<void> { return this._core.onCursorMo...
    method onData (line 74) | public get onData(): IEvent<string> { return this._core.onData; }
    method onKey (line 75) | public get onKey(): IEvent<{ key: string, domEvent: KeyboardEvent }> {...
    method onLineFeed (line 76) | public get onLineFeed(): IEvent<void> { return this._core.onLineFeed; }
    method onRender (line 77) | public get onRender(): IEvent<{ start: number, end: number }> { return...
    method onResize (line 78) | public get onResize(): IEvent<{ cols: number, rows: number }> { return...
    method onScroll (line 79) | public get onScroll(): IEvent<number> { return this._core.onScroll; }
    method onSelectionChange (line 80) | public get onSelectionChange(): IEvent<void> { return this._core.onSel...
    method onTitleChange (line 81) | public get onTitleChange(): IEvent<string> { return this._core.onTitle...
    method onWriteParsed (line 82) | public get onWriteParsed(): IEvent<void> { return this._core.onWritePa...
    method onDimensionsChange (line 83) | public get onDimensionsChange(): IEvent<IRenderDimensions> { return th...
    method element (line 85) | public get element(): HTMLElement | undefined { return this._core.elem...
    method screenElement (line 86) | public get screenElement(): HTMLElement | undefined { return this._cor...
    method parser (line 87) | public get parser(): IParser {
    method unicode (line 90) | public get unicode(): IUnicodeHandling {
    method textarea (line 94) | public get textarea(): HTMLTextAreaElement | undefined { return this._...
    method rows (line 95) | public get rows(): number { return this._core.rows; }
    method cols (line 96) | public get cols(): number { return this._core.cols; }
    method buffer (line 97) | public get buffer(): IBufferNamespaceApi {
    method markers (line 100) | public get markers(): ReadonlyArray<IMarker> {
    method modes (line 103) | public get modes(): IModes {
    method dimensions (line 127) | public get dimensions(): IRenderDimensions | undefined {
    method options (line 130) | public get options(): Required<ITerminalOptions> {
    method options (line 133) | public set options(options: ITerminalOptions) {
    method blur (line 138) | public blur(): void {
    method focus (line 141) | public focus(): void {
    method input (line 144) | public input(data: string, wasUserInput: boolean = true): void {
    method resize (line 147) | public resize(columns: number, rows: number): void {
    method open (line 151) | public open(parent: HTMLElement): void {
    method attachCustomKeyEventHandler (line 154) | public attachCustomKeyEventHandler(customKeyEventHandler: (event: Keyb...
    method attachCustomWheelEventHandler (line 157) | public attachCustomWheelEventHandler(customWheelEventHandler: (event: ...
    method registerLinkProvider (line 160) | public registerLinkProvider(linkProvider: ILinkProvider): IDisposable {
    method registerCharacterJoiner (line 163) | public registerCharacterJoiner(handler: (text: string) => [number, num...
    method deregisterCharacterJoiner (line 166) | public deregisterCharacterJoiner(joinerId: number): void {
    method registerMarker (line 169) | public registerMarker(cursorYOffset: number = 0): IMarker {
    method registerDecoration (line 173) | public registerDecoration(decorationOptions: IDecorationOptions): IDec...
    method hasSelection (line 177) | public hasSelection(): boolean {
    method select (line 180) | public select(column: number, row: number, length: number): void {
    method getSelection (line 184) | public getSelection(): string {
    method getSelectionPosition (line 187) | public getSelectionPosition(): IBufferRange | undefined {
    method clearSelection (line 190) | public clearSelection(): void {
    method selectAll (line 193) | public selectAll(): void {
    method selectLines (line 196) | public selectLines(start: number, end: number): void {
    method dispose (line 200) | public dispose(): void {
    method scrollLines (line 203) | public scrollLines(amount: number): void {
    method scrollPages (line 207) | public scrollPages(pageCount: number): void {
    method scrollToTop (line 211) | public scrollToTop(): void {
    method scrollToBottom (line 214) | public scrollToBottom(): void {
    method scrollToLine (line 217) | public scrollToLine(line: number): void {
    method clear (line 221) | public clear(): void {
    method write (line 224) | public write(data: string | Uint8Array, callback?: () => void): void {
    method writeln (line 227) | public writeln(data: string | Uint8Array, callback?: () => void): void {
    method paste (line 231) | public paste(data: string): void {
    method refresh (line 234) | public refresh(start: number, end: number): void {
    method reset (line 238) | public reset(): void {
    method clearTextureAtlas (line 241) | public clearTextureAtlas(): void {
    method loadAddon (line 244) | public loadAddon(addon: ITerminalAddon): void {
    method strings (line 247) | public static get strings(): ILocalizableStrings {
    method _verifyIntegers (line 257) | private _verifyIntegers(...values: number[]): void {
    method _verifyPositiveIntegers (line 265) | private _verifyPositiveIntegers(...values: number[]): void {

FILE: src/browser/renderer/dom/DomRenderer.ts
  constant TERMINAL_CLASS_PREFIX (line 22) | const TERMINAL_CLASS_PREFIX = 'xterm-dom-renderer-owner-';
  constant ROW_CONTAINER_CLASS (line 23) | const ROW_CONTAINER_CLASS = 'xterm-rows';
  constant FG_CLASS_PREFIX (line 24) | const FG_CLASS_PREFIX = 'xterm-fg-';
  constant BG_CLASS_PREFIX (line 25) | const BG_CLASS_PREFIX = 'xterm-bg-';
  constant FOCUS_CLASS (line 26) | const FOCUS_CLASS = 'xterm-focus';
  constant SELECTION_CLASS (line 27) | const SELECTION_CLASS = 'xterm-selection';
  constant CURSOR_BLINK_IDLE_CLASS (line 28) | const CURSOR_BLINK_IDLE_CLASS = 'xterm-cursor-blink-idle';
  class DomRenderer (line 37) | class DomRenderer extends Disposable implements IRenderer {
    method constructor (line 61) | constructor(
    method _updateDimensions (line 134) | private _updateDimensions(): void {
    method _injectCss (line 176) | private _injectCss(colors: ReadonlyColorSet): void {
    method _setDefaultSpacing (line 321) | private _setDefaultSpacing(): void {
    method handleDevicePixelRatioChange (line 328) | public handleDevicePixelRatioChange(): void {
    method _refreshRowElements (line 334) | private _refreshRowElements(cols: number, rows: number): void {
    method handleResize (line 351) | public handleResize(cols: number, rows: number): void {
    method handleCharSizeChanged (line 357) | public handleCharSizeChanged(): void {
    method handleBlur (line 363) | public handleBlur(): void {
    method handleFocus (line 369) | public handleFocus(): void {
    method handleViewportVisibilityChange (line 375) | public handleViewportVisibilityChange(isVisible: boolean): void {
    method handleSelectionChanged (line 379) | public handleSelectionChanged(start: [number, number] | undefined, end...
    method _createSelectionElement (line 471) | private _createSelectionElement(row: number, colStart: number, colEnd:...
    method handleCursorMove (line 486) | public handleCursorMove(): void {
    method _handleOptionsChanged (line 491) | private _handleOptionsChanged(): void {
    method clear (line 506) | public clear(): void {
    method renderRows (line 525) | public renderRows(start: number, end: number): void {
    method _terminalSelector (line 563) | private get _terminalSelector(): string {
    method _handleLinkHover (line 567) | private _handleLinkHover(e: ILinkifierEvent): void {
    method _handleLinkLeave (line 571) | private _handleLinkLeave(e: ILinkifierEvent): void {
    method _setCellUnderline (line 575) | private _setCellUnderline(x: number, x2: number, y: number, y2: number...
    method _setRowBlinkState (line 637) | private _setRowBlinkState(row: number, hasBlinkingCells: boolean): void {
    method _updateTextBlinkState (line 646) | private _updateTextBlinkState(): void {
  class CursorBlinkStateManager (line 651) | class CursorBlinkStateManager {
    method constructor (line 655) | constructor(
    method dispose (line 664) | public dispose(): void {
    method restartBlinkAnimation (line 668) | public restartBlinkAnimation(): void {
    method pause (line 675) | public pause(): void {
    method resume (line 680) | public resume(): void {
    method _resetIdleTimer (line 686) | private _resetIdleTimer(): void {
    method _clearIdleTimer (line 694) | private _clearIdleTimer(): void {
    method _stopBlinkingDueToIdle (line 701) | private _stopBlinkingDueToIdle(): void {

FILE: src/browser/renderer/dom/DomRendererRowFactory.test.ts
  function extractHtml (line 513) | function extractHtml(spans: HTMLSpanElement[]): string {
  function createEmptyLineData (line 519) | function createEmptyLineData(cols: number): IBufferLine {

FILE: src/browser/renderer/dom/DomRendererRowFactory.ts
  type RowCss (line 20) | const enum RowCss {
  class DomRendererRowFactory (line 37) | class DomRendererRowFactory {
    method constructor (line 46) | constructor(
    method handleSelectionChanged (line 56) | public handleSelectionChanged(start: [number, number] | undefined, end...
    method createRow (line 62) | public createRow(
    method _applyMinimumContrast (line 493) | private _applyMinimumContrast(element: HTMLElement, bg: IColor, fg: IC...
    method _getContrastCache (line 522) | private _getContrastCache(cell: ICellData): IColorContrastCache {
    method _addStyle (line 529) | private _addStyle(element: HTMLElement, style: string): void {
    method _isCellInSelection (line 533) | private _isCellInSelection(x: number, y: number): boolean {

FILE: src/browser/renderer/dom/WidthCache.test.ts
  class MockWidthCacheFontVariantCanvas (line 10) | class MockWidthCacheFontVariantCanvas implements IWidthCacheFontVariantC...
    method setFont (line 13) | public setFont(_fontFamily: string, _fontSize: number, _fontWeight: un...
    method measure (line 16) | public measure(c: string): number {
  class TestWidthCache (line 21) | class TestWidthCache extends WidthCache {
    method flat (line 22) | public get flat(): Float32Array {
    method holey (line 25) | public get holey(): Map<string, number> | undefined {
    method canvasElements (line 28) | public get canvasElements(): MockWidthCacheFontVariantCanvas[] {
    method constructor (line 32) | constructor() {
    method setWidths (line 36) | public setWidths(widths: { [key: string]: number }): void {
  function castf32 (line 44) | function castf32(v: number): number {

FILE: src/browser/renderer/dom/WidthCache.ts
  type WidthCacheSettings (line 11) | const enum WidthCacheSettings {
  type FontVariant (line 21) | const enum FontVariant {
  type IWidthCacheFontVariantCanvas (line 28) | interface IWidthCacheFontVariantCanvas {
  class WidthCache (line 33) | class WidthCache implements IDisposable {
    method constructor (line 52) | constructor(
    method dispose (line 65) | public dispose(): void {
    method clear (line 73) | public clear(): void {
    method setFont (line 84) | public setFont(font: string, fontSize: number, weight: FontWeight, wei...
    method get (line 112) | public get(c: string, bold: boolean | number, italic: boolean | number...
    method _measure (line 140) | protected _measure(c: string, variant: FontVariant): number {
  class WidthCacheFontVariantCanvas (line 145) | class WidthCacheFontVariantCanvas implements IWidthCacheFontVariantCanvas {
    method constructor (line 149) | constructor() {
    method setFont (line 161) | public setFont(fontFamily: string, fontSize: number, fontWeight: FontW...
    method measure (line 166) | public measure(c: string): number {

FILE: src/browser/renderer/shared/Constants.ts
  constant INVERTED_DEFAULT_COLOR (line 6) | const INVERTED_DEFAULT_COLOR = 257;
  type RendererConstants (line 8) | const enum RendererConstants {

FILE: src/browser/renderer/shared/RendererUtils.ts
  function throwIfFalsy (line 8) | function throwIfFalsy<T>(value: T | undefined | null): T {
  function isPowerlineGlyph (line 15) | function isPowerlineGlyph(codepoint: number): boolean {
  function isRestrictedPowerlineGlyph (line 22) | function isRestrictedPowerlineGlyph(codepoint: number): boolean {
  function isNerdFontGlyph (line 26) | function isNerdFontGlyph(codepoint: number): boolean {
  function isBoxOrBlockGlyph (line 30) | function isBoxOrBlockGlyph(codepoint: number): boolean {
  function isEmoji (line 34) | function isEmoji(codepoint: number): boolean {
  function allowRescaling (line 47) | function allowRescaling(codepoint: number | undefined, width: number, gl...
  function treatGlyphAsBackgroundColor (line 63) | function treatGlyphAsBackgroundColor(codepoint: number): boolean {
  function createRenderDimensions (line 67) | function createRenderDimensions(): IRenderDimensions {
  function createDimension (line 86) | function createDimension(): IDimensions {
  function computeNextVariantOffset (line 93) | function computeNextVariantOffset(cellWidth: number, lineWidth: number, ...

FILE: src/browser/renderer/shared/SelectionRenderModel.ts
  class SelectionRenderModel (line 10) | class SelectionRenderModel implements ISelectionRenderModel {
    method constructor (line 22) | constructor() {
    method clear (line 26) | public clear(): void {
    method update (line 39) | public update(terminal: ITerminal, start: [number, number] | undefined...
    method isCellSelected (line 71) | public isCellSelected(terminal: Terminal, x: number, y: number): boole...
  function createSelectionRenderModel (line 91) | function createSelectionRenderModel(): ISelectionRenderModel {

FILE: src/browser/renderer/shared/TextBlinkStateManager.test.ts
  class FakeWindow (line 12) | class FakeWindow {
    method setInterval (line 16) | public setInterval(callback: () => void, _duration: number): number {
    method clearInterval (line 22) | public clearInterval(id: number): void {
  function createManager (line 27) | function createManager(duration: number): {
  function getOnlyIntervalCallback (line 54) | function getOnlyIntervalCallback(window: FakeWindow): () => void {

FILE: src/browser/renderer/shared/TextBlinkStateManager.ts
  class TextBlinkStateManager (line 10) | class TextBlinkStateManager extends Disposable {
    method constructor (line 17) | constructor(
    method isBlinkOn (line 30) | public get isBlinkOn(): boolean {
    method isEnabled (line 34) | public get isEnabled(): boolean {
    method setNeedsBlinkInViewport (line 38) | public setNeedsBlinkInViewport(needsBlinkInViewport: boolean): void {
    method setViewportVisible (line 47) | public setViewportVisible(isVisible: boolean): void {
    method setIntervalDuration (line 56) | public setIntervalDuration(duration: number): void {
    method _updateIntervalState (line 66) | private _updateIntervalState(): void {
    method _clearInterval (line 91) | private _clearInterval(): void {

FILE: src/browser/renderer/shared/Types.ts
  type IDimensions (line 11) | interface IDimensions {
  type IOffset (line 16) | interface IOffset {
  type IRenderDimensions (line 21) | interface IRenderDimensions {
  type IRequestRedrawEvent (line 39) | interface IRequestRedrawEvent {
  type IRenderer (line 53) | interface IRenderer extends IDisposable {
  type ISelectionRenderModel (line 76) | interface ISelectionRenderModel {

FILE: src/browser/scrollable/abstractScrollbar.ts
  constant POINTER_DRAG_RESET_DISTANCE (line 20) | const POINTER_DRAG_RESET_DISTANCE = 140;
  type ISimplifiedPointerEvent (line 22) | interface ISimplifiedPointerEvent {
  type IScrollbarHost (line 28) | interface IScrollbarHost {
  type IAbstractScrollbarOptions (line 34) | interface IAbstractScrollbarOptions {
  method constructor (line 59) | constructor(opts: IAbstractScrollbarOptions) {
  method _createArrow (line 85) | protected _createArrow(opts: IScrollbarArrowOptions): ScrollbarArrow {
  method _createSlider (line 95) | protected _createSlider(top: number, left: number, width: number | undef...
  method _handleElementSize (line 132) | protected _handleElementSize(visibleSize: number): boolean {
  method _handleElementScrollSize (line 143) | protected _handleElementScrollSize(elementScrollSize: number): boolean {
  method _handleElementScrollPosition (line 154) | protected _handleElementScrollPosition(elementScrollPosition: number): b...
  method beginReveal (line 167) | public beginReveal(): void {
  method beginHide (line 171) | public beginHide(): void {
  method render (line 175) | public render(): void {
  method _domNodePointerDown (line 186) | private _domNodePointerDown(e: PointerEvent): void {
  method delegatePointerDown (line 193) | public delegatePointerDown(e: PointerEvent): void {
  method _handlePointerDown (line 208) | private _handlePointerDown(e: PointerEvent): void {
  method _sliderPointerDown (line 233) | private _sliderPointerDown(e: PointerEvent): void {
  method _setDesiredScrollPositionNow (line 268) | private _setDesiredScrollPositionNow(_desiredScrollPosition: number): vo...
  method updateScrollbarSize (line 276) | public updateScrollbarSize(scrollbarSize: number): void {
  method isNeeded (line 285) | public isNeeded(): boolean {

FILE: src/browser/scrollable/fastDomNode.ts
  class FastDomNode (line 6) | class FastDomNode<T extends HTMLElement> {
    method constructor (line 19) | constructor(
    method setWidth (line 23) | public setWidth(_width: number | string): void {
    method setHeight (line 32) | public setHeight(_height: number | string): void {
    method setTop (line 41) | public setTop(_top: number | string): void {
    method setLeft (line 50) | public setLeft(_left: number | string): void {
    method setBottom (line 59) | public setBottom(_bottom: number | string): void {
    method setRight (line 68) | public setRight(_right: number | string): void {
    method setClassName (line 77) | public setClassName(className: string): void {
    method toggleClassName (line 85) | public toggleClassName(className: string, shouldHaveIt?: boolean): void {
    method setPosition (line 90) | public setPosition(position: string): void {
    method setLayerHinting (line 98) | public setLayerHinting(layerHint: boolean): void {
    method setContain (line 110) | public setContain(contain: 'none' | 'strict' | 'content' | 'size' | 'l...
    method setAttribute (line 118) | public setAttribute(name: string, value: string): void {
  function numberAsPixels (line 124) | function numberAsPixels(value: number | string): string {

FILE: src/browser/scrollable/globalPointerMoveMonitor.ts
  type PointerMoveCallback (line 9) | type PointerMoveCallback = (event: PointerEvent) => void;
  type OnStopCallback (line 10) | type OnStopCallback = () => void;
  class GlobalPointerMoveMonitor (line 12) | class GlobalPointerMoveMonitor implements IDisposable {
    method dispose (line 18) | public dispose(): void {
    method stopMonitoring (line 23) | public stopMonitoring(invokeStopCallback: boolean): void {
    method isMonitoring (line 38) | public isMonitoring(): boolean {
    method startMonitoring (line 42) | public startMonitoring(

FILE: src/browser/scrollable/horizontalScrollbar.ts
  class HorizontalScrollbar (line 11) | class HorizontalScrollbar extends AbstractScrollbar {
    method constructor (line 13) | constructor(scrollable: Scrollable, options: IScrollableElementResolve...
    method _updateSlider (line 40) | protected _updateSlider(sliderSize: number, sliderPosition: number): v...
    method _renderDomNode (line 45) | protected _renderDomNode(largeSize: number, smallSize: number): void {
    method handleScroll (line 52) | public handleScroll(e: IScrollEvent): boolean {
    method _pointerDownRelativePosition (line 59) | protected _pointerDownRelativePosition(offsetX: number, offsetY: numbe...
    method _sliderPointerPosition (line 63) | protected _sliderPointerPosition(e: ISimplifiedPointerEvent): number {
    method _sliderOrthogonalPointerPosition (line 67) | protected _sliderOrthogonalPointerPosition(e: ISimplifiedPointerEvent)...
    method _updateScrollbarSize (line 71) | protected _updateScrollbarSize(size: number): void {
    method writeScrollPosition (line 75) | public writeScrollPosition(target: INewScrollPosition, scrollPosition:...
    method updateOptions (line 79) | public updateOptions(options: IScrollableElementResolvedOptions): void {

FILE: src/browser/scrollable/mouseEvent.ts
  type IWindowChainElement (line 8) | interface IWindowChainElement {
  function getParentWindowIfSameOrigin (line 15) | function getParentWindowIfSameOrigin(w: Window): Window | null {
  class IframeUtils (line 33) | class IframeUtils {
    method _getSameOriginWindowChain (line 35) | private static _getSameOriginWindowChain(targetWindow: Window): IWindo...
    method getPositionOfChildWindowRelativeToAncestorWindow (line 61) | public static getPositionOfChildWindowRelativeToAncestorWindow(childWi...
  type IMouseEvent (line 100) | interface IMouseEvent {
  class StandardMouseEvent (line 120) | class StandardMouseEvent implements IMouseEvent {
    method constructor (line 138) | constructor(targetWindow: Window, e: MouseEvent) {
    method preventDefault (line 170) | public preventDefault(): void {
    method stopPropagation (line 174) | public stopPropagation(): void {
  type IMouseWheelEvent (line 179) | interface IMouseWheelEvent extends MouseEvent {
  type IWebKitMouseWheelEvent (line 190) | interface IWebKitMouseWheelEvent {
  type IGeckoMouseWheelEvent (line 195) | interface IGeckoMouseWheelEvent {
  class StandardWheelEvent (line 202) | class StandardWheelEvent {
    method constructor (line 209) | constructor(e: IMouseWheelEvent | null, deltaX: number = 0, deltaY: nu...
    method preventDefault (line 285) | public preventDefault(): void {
    method stopPropagation (line 289) | public stopPropagation(): void {

FILE: src/browser/scrollable/scrollable.ts
  type ScrollbarVisibility (line 9) | const enum ScrollbarVisibility {
  type IScrollEvent (line 15) | interface IScrollEvent {
  class ScrollState (line 43) | class ScrollState implements IScrollDimensions, IScrollPosition {
    method constructor (line 56) | constructor(
    method equals (line 105) | public equals(other: ScrollState): boolean {
    method withScrollDimensions (line 118) | public withScrollDimensions(update: INewScrollDimensions, useRawScroll...
    method withScrollPosition (line 130) | public withScrollPosition(update: INewScrollPosition): ScrollState {
    method createScrollEvent (line 142) | public createScrollEvent(previous: ScrollState, inSmoothScrolling: boo...
  type IScrollDimensions (line 181) | interface IScrollDimensions {
  type INewScrollDimensions (line 187) | interface INewScrollDimensions {
  type IScrollPosition (line 194) | interface IScrollPosition {
  type ISmoothScrollPosition (line 198) | interface ISmoothScrollPosition {
  type INewScrollPosition (line 205) | interface INewScrollPosition {
  type IScrollableOptions (line 210) | interface IScrollableOptions {
  class Scrollable (line 216) | class Scrollable extends Disposable {
    method constructor (line 228) | constructor(options: IScrollableOptions) {
    method dispose (line 237) | public override dispose(): void {
    method setSmoothScrollDuration (line 245) | public setSmoothScrollDuration(smoothScrollDuration: number): void {
    method validateScrollPosition (line 249) | public validateScrollPosition(scrollPosition: INewScrollPosition): ISc...
    method getScrollDimensions (line 253) | public getScrollDimensions(): IScrollDimensions {
    method setScrollDimensions (line 257) | public setScrollDimensions(dimensions: INewScrollDimensions, useRawScr...
    method getFutureScrollPosition (line 264) | public getFutureScrollPosition(): IScrollPosition {
    method getCurrentScrollPosition (line 271) | public getCurrentScrollPosition(): IScrollPosition {
    method setScrollPositionNow (line 275) | public setScrollPositionNow(update: INewScrollPosition): void {
    method setScrollPositionSmooth (line 286) | public setScrollPositionSmooth(update: INewScrollPosition, reuseAnimat...
    method hasPendingScrollAnimation (line 325) | public hasPendingScrollAnimation(): boolean {
    method _performSmoothScrolling (line 329) | private _performSmoothScrolling(): void {
    method _setState (line 357) | private _setState(newState: ScrollState, inSmoothScrolling: boolean): ...
  class SmoothScrollingUpdate (line 367) | class SmoothScrollingUpdate {
    method constructor (line 373) | constructor(scrollLeft: number, scrollTop: number, isDone: boolean) {
  type IAnimation (line 381) | interface IAnimation {
  function createEaseOutCubic (line 385) | function createEaseOutCubic(from: number, to: number): IAnimation {
  function createComposed (line 392) | function createComposed(a: IAnimation, b: IAnimation, cut: number): IAni...
  class SmoothScrollingOperation (line 401) | class SmoothScrollingOperation {
    method constructor (line 412) | constructor(from: ISmoothScrollPosition, to: ISmoothScrollPosition, st...
    method _initAnimations (line 423) | private _initAnimations(): void {
    method _initAnimation (line 428) | private _initAnimation(from: number, to: number, viewportSize: number)...
    method dispose (line 444) | public dispose(): void {
    method acceptScrollDimensions (line 451) | public acceptScrollDimensions(state: ScrollState): void {
    method tick (line 456) | public tick(): SmoothScrollingUpdate {
    method _tick (line 460) | protected _tick(now: number): SmoothScrollingUpdate {
    method start (line 472) | public static start(from: ISmoothScrollPosition, to: ISmoothScrollPosi...
  function easeInCubic (line 480) | function easeInCubic(t: number): number {
  function easeOutCubic (line 484) | function easeOutCubic(t: number): number {

FILE: src/browser/scrollable/scrollableElement.ts
  constant HIDE_TIMEOUT (line 21) | const HIDE_TIMEOUT = 500;
  constant SCROLL_WHEEL_SENSITIVITY (line 22) | const SCROLL_WHEEL_SENSITIVITY = 50;
  class MouseWheelClassifierItem (line 24) | class MouseWheelClassifierItem {
    method constructor (line 30) | constructor(timestamp: number, deltaX: number, deltaY: number) {
  class MouseWheelClassifier (line 38) | class MouseWheelClassifier {
    method constructor (line 47) | constructor() {
    method isPhysicalMouseWheel (line 54) | public isPhysicalMouseWheel(): boolean {
    method acceptStandardWheelEvent (line 80) | public acceptStandardWheelEvent(e: StandardWheelEvent): void {
    method accept (line 90) | public accept(timestamp: number, deltaX: number, deltaY: number): void {
    method _computeScore (line 111) | private _computeScore(item: MouseWheelClassifierItem, previousItem: Mo...
    method _isAlmostInt (line 145) | private _isAlmostInt(value: number): boolean {
  class SmoothScrollableElement (line 151) | class SmoothScrollableElement extends Widget {
    method options (line 178) | public get options(): Readonly<IScrollableElementResolvedOptions> {
    method constructor (line 182) | public constructor(element: HTMLElement, options: IScrollableElementCr...
    method dispose (line 260) | public override dispose(): void {
    method getDomNode (line 265) | public getDomNode(): HTMLElement {
    method getScrollDimensions (line 269) | public getScrollDimensions(): IScrollDimensions {
    method setScrollDimensions (line 273) | public setScrollDimensions(dimensions: INewScrollDimensions): void {
    method setScrollPosition (line 277) | public setScrollPosition(update: INewScrollPosition & { reuseAnimation...
    method getScrollPosition (line 285) | public getScrollPosition(): IScrollPosition {
    method updateClassName (line 289) | public updateClassName(newClassName: string): void {
    method updateOptions (line 297) | public updateOptions(newOptions: IScrollableElementChangeOptions): void {
    method delegateScrollFromMouseWheelEvent (line 340) | public delegateScrollFromMouseWheelEvent(browserEvent: IMouseWheelEven...
    method _setListeningToMouseWheel (line 346) | private _setListeningToMouseWheel(shouldListen: boolean): void {
    method _handleMouseWheel (line 364) | private _handleMouseWheel(e: StandardWheelEvent): void {
    method _handleScroll (line 450) | private _handleScroll(e: IScrollEvent): void {
    method renderNow (line 467) | public renderNow(): void {
    method _render (line 475) | private _render(): void {
    method _handleDragStart (line 501) | private _handleDragStart(): void {
    method _handleDragEnd (line 506) | private _handleDragEnd(): void {
    method _handleMouseLeave (line 511) | private _handleMouseLeave(e: IMouseEvent): void {
    method _handleMouseOver (line 516) | private _handleMouseOver(e: IMouseEvent): void {
    method _reveal (line 521) | private _reveal(): void {
    method _hide (line 527) | private _hide(): void {
    method _scheduleHide (line 534) | private _scheduleHide(): void {
  function resolveOptions (line 541) | function resolveOptions(opts: IScrollableElementCreationOptions): IScrol...

FILE: src/browser/scrollable/scrollableElementOptions.ts
  type IScrollableElementCreationOptions (line 8) | interface IScrollableElementCreationOptions {
  type IScrollableElementChangeOptions (line 124) | interface IScrollableElementChangeOptions {
  type IScrollableElementResolvedOptions (line 138) | interface IScrollableElementResolvedOptions {

FILE: src/browser/scrollable/scrollbarArrow.ts
  type IScrollbarArrowOptions (line 11) | interface IScrollbarArrowOptions {
  class ScrollbarArrow (line 25) | class ScrollbarArrow extends Widget {
    method constructor (line 34) | constructor(opts: IScrollbarArrowOptions) {
    method _arrowPointerDown (line 85) | private _arrowPointerDown(e: PointerEvent): void {

FILE: src/browser/scrollable/scrollbarState.ts
  constant MINIMUM_SLIDER_SIZE (line 10) | const MINIMUM_SLIDER_SIZE = 20;
  type IScrollbarStateComputedValues (line 12) | interface IScrollbarStateComputedValues {
  class ScrollbarState (line 20) | class ScrollbarState {
    method constructor (line 74) | constructor(arrowSize: number, scrollbarSize: number, oppositeScrollba...
    method clone (line 92) | public clone(): ScrollbarState {
    method setVisibleSize (line 96) | public setVisibleSize(visibleSize: number): boolean {
    method setScrollSize (line 106) | public setScrollSize(scrollSize: number): boolean {
    method setScrollPosition (line 116) | public setScrollPosition(scrollPosition: number): boolean {
    method setScrollbarSize (line 126) | public setScrollbarSize(scrollbarSize: number): void {
    method setArrowSize (line 130) | public setArrowSize(arrowSize: number): void {
    method setOppositeScrollbarSize (line 138) | public setOppositeScrollbarSize(oppositeScrollbarSize: number): void {
    method _computeValues (line 142) | private static _computeValues(
    method _refreshComputedValues (line 177) | private _refreshComputedValues(): void {
    method getArrowSize (line 186) | public getArrowSize(): number {
    method getScrollPosition (line 190) | public getScrollPosition(): number {
    method getRectangleLargeSize (line 194) | public getRectangleLargeSize(): number {
    method getRectangleSmallSize (line 198) | public getRectangleSmallSize(): number {
    method isNeeded (line 202) | public isNeeded(): boolean {
    method getSliderSize (line 206) | public getSliderSize(): number {
    method getSliderPosition (line 210) | public getSliderPosition(): number {
    method getDesiredScrollPositionFromOffset (line 214) | public getDesiredScrollPositionFromOffset(offset: number): number {
    method getDesiredScrollPositionFromOffsetPaged (line 223) | public getDesiredScrollPositionFromOffsetPaged(offset: number): number {
    method getDesiredScrollPositionFromDelta (line 238) | public getDesiredScrollPositionFromDelta(delta: number): number {

FILE: src/browser/scrollable/scrollbarVisibilityController.ts
  class ScrollbarVisibilityController (line 11) | class ScrollbarVisibilityController extends Disposable {
    method constructor (line 22) | constructor(visibility: ScrollbarVisibility, visibleClassName: string,...
    method setVisibility (line 35) | public setVisibility(visibility: ScrollbarVisibility): void {
    method setShouldBeVisible (line 42) | public setShouldBeVisible(rawShouldBeVisible: boolean): void {
    method _applyVisibilitySetting (line 47) | private _applyVisibilitySetting(): boolean {
    method _updateShouldBeVisible (line 57) | private _updateShouldBeVisible(): void {
    method setIsNeeded (line 66) | public setIsNeeded(isNeeded: boolean): void {
    method setDomNode (line 73) | public setDomNode(domNode: FastDomNode<HTMLElement>): void {
    method ensureVisibility (line 80) | public ensureVisibility(): void {
    method _reveal (line 94) | private _reveal(): void {
    method _hide (line 105) | private _hide(withFadeAway: boolean): void {

FILE: src/browser/scrollable/touch.ts
  function tail (line 11) | function tail<T>(array: ArrayLike<T>, n: number = 0): T | undefined {
  function memoize (line 15) | function memoize(_target: any, key: string, descriptor: PropertyDescript...
  class LinkedListNode (line 51) | class LinkedListNode<E> {
    method constructor (line 59) | public constructor(element: E) {
  class LinkedList (line 66) | class LinkedList<E> {
    method push (line 71) | public push(element: E): () => void {
    method _insert (line 75) | private _insert(element: E, atTheEnd: boolean): () => void {
    method _remove (line 102) | private _remove(node: LinkedListNode<E>): void {
  method [Symbol.iterator] (line 122) | public *[Symbol.iterator](): Iterator<E> {
  type ITouchData (line 139) | interface ITouchData {
  type IGestureEvent (line 150) | interface IGestureEvent extends MouseEvent {
  type ITouch (line 161) | interface ITouch {
  type ITouchList (line 176) | interface ITouchList {
  type ITouchEvent (line 183) | interface ITouchEvent extends Event {
  class Gesture (line 189) | class Gesture extends Disposable {
    method constructor (line 207) | private constructor() {
    method addTarget (line 220) | public static addTarget(element: HTMLElement): IDisposable {
    method ignoreTarget (line 232) | public static ignoreTarget(element: HTMLElement): IDisposable {
    method isTouchDevice (line 245) | public static isTouchDevice(): boolean {
    method dispose (line 249) | public override dispose(): void {
    method _handleTouchStart (line 258) | private _handleTouchStart(e: ITouchEvent): void {
    method _handleTouchEnd (line 293) | private _handleTouchEnd(targetWindow: Window, e: ITouchEvent): void {
    method _newGestureEvent (line 359) | private _newGestureEvent(type: string, initialTarget?: EventTarget): I...
    method _dispatchEvent (line 367) | private _dispatchEvent(event: IGestureEvent): void {
    method _inertia (line 412) | private _inertia(targetWindow: Window, dispatchTo: ReadonlyArray<Event...
    method _handleTouchMove (line 445) | private _handleTouchMove(e: ITouchEvent): void {

FILE: src/browser/scrollable/verticalScrollbar.ts
  class VerticalScrollbar (line 12) | class VerticalScrollbar extends AbstractScrollbar {
    method constructor (line 17) | constructor(scrollable: Scrollable, options: IScrollableElementResolve...
    method _updateSlider (line 43) | protected _updateSlider(sliderSize: number, sliderPosition: number): v...
    method _renderDomNode (line 48) | protected _renderDomNode(largeSize: number, smallSize: number): void {
    method handleScroll (line 55) | public handleScroll(e: IScrollEvent): boolean {
    method _pointerDownRelativePosition (line 62) | protected _pointerDownRelativePosition(offsetX: number, offsetY: numbe...
    method _sliderPointerPosition (line 66) | protected _sliderPointerPosition(e: ISimplifiedPointerEvent): number {
    method _sliderOrthogonalPointerPosition (line 70) | protected _sliderOrthogonalPointerPosition(e: ISimplifiedPointerEvent)...
    method _updateScrollbarSize (line 74) | protected _updateScrollbarSize(size: number): void {
    method writeScrollPosition (line 78) | public writeScrollPosition(target: INewScrollPosition, scrollPosition:...
    method _arrowScroll (line 82) | private _arrowScroll(delta: number): void {
    method _setArrows (line 87) | private _setArrows(showArrows: boolean, size: number): void {
    method _updateArrowSize (line 123) | private _updateArrowSize(arrow: ScrollbarArrow | undefined, size: numb...
    method updateOptions (line 133) | public updateOptions(options: IScrollableElementResolvedOptions): void {

FILE: src/browser/scrollable/widget.ts
  method _onclick (line 12) | protected _onclick(domNode: HTMLElement, listener: (e: IMouseEvent) => v...
  method _onmouseover (line 16) | protected _onmouseover(domNode: HTMLElement, listener: (e: IMouseEvent) ...
  method _onmouseleave (line 20) | protected _onmouseleave(domNode: HTMLElement, listener: (e: IMouseEvent)...

FILE: src/browser/selection/SelectionModel.ts
  class SelectionModel (line 12) | class SelectionModel {
    method constructor (line 35) | constructor(
    method clearSelection (line 43) | public clearSelection(): void {
    method finalSelectionStart (line 53) | public get finalSelectionStart(): [number, number] | undefined {
    method finalSelectionEnd (line 69) | public get finalSelectionEnd(): [number, number] | undefined {
    method areSelectionValuesReversed (line 109) | public areSelectionValuesReversed(): boolean {
    method handleTrim (line 123) | public handleTrim(amount: number): boolean {

FILE: src/browser/selection/Types.ts
  type ISelectionRedrawRequestEvent (line 6) | interface ISelectionRedrawRequestEvent {
  type ISelectionRequestScrollLinesEvent (line 12) | interface ISelectionRequestScrollLinesEvent {

FILE: src/browser/services/CharSizeService.ts
  class CharSizeService (line 11) | class CharSizeService extends Disposable implements ICharSizeService {
    method hasValidSize (line 18) | public get hasValidSize(): boolean { return this.width > 0 && this.hei...
    method constructor (line 23) | constructor(
    method measure (line 37) | public measure(): void {
  type IMeasureStrategy (line 47) | interface IMeasureStrategy {
  type IMeasureResult (line 51) | interface IMeasureResult {
  type DomMeasureStrategyConstants (line 56) | const enum DomMeasureStrategyConstants {
  method _validateAndSet (line 63) | protected _validateAndSet(width: number | undefined, height: number | un...
  class DomMeasureStrategy (line 75) | class DomMeasureStrategy extends BaseMeasureStategy {
    method constructor (line 78) | constructor(
    method measure (line 93) | public measure(): Readonly<IMeasureResult> {
  class TextMetricsMeasureStrategy (line 104) | class TextMetricsMeasureStrategy extends BaseMeasureStategy {
    method constructor (line 108) | constructor(
    method measure (line 121) | public measure(): Readonly<IMeasureResult> {

FILE: src/browser/services/CharacterJoinerService.test.ts
  type IPartialLineData (line 267) | type IPartialLineData = ([string] | [string, number]);
  function lineData (line 269) | function lineData(data: IPartialLineData[]): IBufferLine {
  function substringJoiner (line 281) | function substringJoiner(substring: string): (sequence: string) => [numb...

FILE: src/browser/services/CharacterJoinerService.ts
  class JoinedCellData (line 14) | class JoinedCellData extends AttributeData implements ICellData {
    method constructor (line 23) | constructor(firstCell: ICellData, chars: string, width: number) {
    method isCombined (line 31) | public isCombined(): number {
    method getWidth (line 36) | public getWidth(): number {
    method getChars (line 40) | public getChars(): string {
    method getCode (line 44) | public getCode(): number {
    method setFromCharData (line 50) | public setFromCharData(value: CharData): void {
    method getAsCharData (line 54) | public getAsCharData(): CharData {
  class CharacterJoinerService (line 59) | class CharacterJoinerService implements ICharacterJoinerService {
    method constructor (line 66) | constructor(
    method register (line 70) | public register(handler: (text: string) => [number, number][]): number {
    method deregister (line 80) | public deregister(joinerId: number): boolean {
    method getJoinedCharacters (line 91) | public getJoinedCharacters(row: number): [number, number][] {
    method _getJoinedRanges (line 174) | private _getJoinedRanges(line: string, startIndex: number, endIndex: n...
    method _stringRangesToCellRanges (line 208) | private _stringRangesToCellRanges(ranges: [number, number][], line: IB...
    method _mergeRanges (line 279) | private static _mergeRanges(ranges: [number, number][], newRange: [num...

FILE: src/browser/services/CoreBrowserService.ts
  class CoreBrowserService (line 11) | class CoreBrowserService extends Disposable implements ICoreBrowserServi...
    method constructor (line 23) | constructor(
    method window (line 40) | public get window(): Window & typeof globalThis {
    method window (line 44) | public set window(value: Window & typeof globalThis) {
    method dpr (line 51) | public get dpr(): number {
    method isFocused (line 55) | public get isFocused(): boolean {
  class ScreenDprMonitor (line 75) | class ScreenDprMonitor extends Disposable {
    method constructor (line 84) | constructor(private _parentWindow: Window) {
    method setWindow (line 100) | public setWindow(parentWindow: Window): void {
    method _setWindowResizeListener (line 106) | private _setWindowResizeListener(): void {
    method _setDprAndFireIfDiffers (line 110) | private _setDprAndFireIfDiffers(): void {
    method _updateDpr (line 117) | private _updateDpr(): void {
    method clearListener (line 131) | public clearListener(): void {

FILE: src/browser/services/KeyboardService.ts
  class KeyboardService (line 14) | class KeyboardService implements IKeyboardService {
    method constructor (line 20) | constructor(
    method _getWin32InputMode (line 26) | private _getWin32InputMode(): Win32InputMode {
    method _getKittyKeyboard (line 31) | private _getKittyKeyboard(): KittyKeyboard {
    method evaluateKeyDown (line 36) | public evaluateKeyDown(event: KeyboardEvent): IKeyboardResult {
    method evaluateKeyUp (line 47) | public evaluateKeyUp(event: KeyboardEvent): IKeyboardResult | undefined {
    method useKitty (line 59) | public get useKitty(): boolean {
    method useWin32InputMode (line 64) | public get useWin32InputMode(): boolean {

FILE: src/browser/services/LinkProviderService.ts
  class LinkProviderService (line 5) | class LinkProviderService extends Disposable implements ILinkProviderSer...
    method constructor (line 10) | constructor() {
    method registerLinkProvider (line 15) | public registerLinkProvider(linkProvider: ILinkProvider): IDisposable {

FILE: src/browser/services/MouseCoordsService.ts
  class MouseCoordsService (line 10) | class MouseCoordsService implements IMouseCoordsService {
    method constructor (line 13) | constructor(
    method getCoords (line 19) | public getCoords(event: {clientX: number, clientY: number}, element: H...
    method getMouseReportCoords (line 33) | public getMouseReportCoords(event: MouseEvent, element: HTMLElement): ...

FILE: src/browser/services/MouseService.test.ts
  function toBytes (line 12) | function toBytes(s: string | undefined): number[] {
  function trigger (line 75) | function trigger(e: Parameters<any>[0]): boolean {

FILE: src/browser/services/MouseService.ts
  type RequestedMouseEvents (line 14) | type RequestedMouseEvents = Record<'mouseup' | 'wheel' | 'mousedrag' | '...
  type IMouseBindContext (line 16) | interface IMouseBindContext {
  class MouseService (line 22) | class MouseService implements IMouseService {
    method constructor (line 29) | constructor(
    method bindMouse (line 42) | public bindMouse(target: IMouseServiceTarget, register: (disposable: I...
    method _sendEvent (line 92) | private _sendEvent(ctx: IMouseBindContext, ev: MouseEvent | WheelEvent...
    method _handleMouseUp (line 169) | private _handleMouseUp(ctx: IMouseBindContext, ev: MouseEvent): void {
    method _handleWheel (line 182) | private _handleWheel(ctx: IMouseBindContext, ev: WheelEvent): false {
    method _handleMouseDrag (line 189) | private _handleMouseDrag(ctx: IMouseBindContext, ev: MouseEvent): void {
    method _handleMouseMove (line 196) | private _handleMouseMove(ctx: IMouseBindContext, ev: MouseEvent): void {
    method _handleMouseDown (line 203) | private _handleMouseDown(ctx: IMouseBindContext, ev: MouseEvent): void {
    method _handlePassiveWheel (line 228) | private _handlePassiveWheel(ctx: IMouseBindContext, ev: WheelEvent): f...
    method _handleTouchStart (line 272) | private _handleTouchStart(): void {
    method _handleTouchChange (line 276) | private _handleTouchChange(ctx: IMouseBindContext, e: IGestureEvent): ...
    method _handleTouchScrollAsKeys (line 296) | private _handleTouchScrollAsKeys(e: IGestureEvent): void {
    method _handleTouchScrollAsWheel (line 317) | private _handleTouchScrollAsWheel(ctx: IMouseBindContext, e: IGestureE...
    method reset (line 350) | public reset(): void {
    method _handleProtocolChange (line 356) | private _handleProtocolChange(ctx: IMouseBindContext, eventListeners: ...
    method _applyScrollModifier (line 412) | private _applyScrollModifier(amount: number, ev: WheelEvent): number {
    method _consumeWheelEvent (line 424) | private _consumeWheelEvent(ev: WheelEvent, cellHeight?: number, dpr?: ...
    method _triggerMouseEvent (line 464) | private _triggerMouseEvent(e: ICoreMouseEvent): boolean {
    method _explainEvents (line 513) | private _explainEvents(events: CoreMouseEventType): { [event: string]:...
    method _equalEvents (line 523) | private _equalEvents(e1: ICoreMouseEvent, e2: ICoreMouseEvent, pixels:...

FILE: src/browser/services/RenderService.ts
  type ISelectionState (line 15) | interface ISelectionState {
  type Constants (line 21) | const enum Constants {
  class RenderService (line 25) | class RenderService extends Disposable implements IRenderService {
    method dimensions (line 55) | public get dimensions(): IRenderDimensions { return this._renderer.val...
    method constructor (line 57) | constructor(
    method _registerIntersectionObserver (line 125) | private _registerIntersectionObserver(w: Window & typeof globalThis, s...
    method _handleIntersectionChange (line 135) | private _handleIntersectionChange(entry: IntersectionObserverEntry): v...
    method refreshRows (line 151) | public refreshRows(start: number, end: number, sync: boolean = false, ...
    method _renderRows (line 179) | private _renderRows(start: number, end: number): void {
    method resize (line 214) | public resize(cols: number, rows: number): void {
    method _handleOptionsChanged (line 219) | private _handleOptionsChanged(): void {
    method _fireOnCanvasResize (line 227) | private _fireOnCanvasResize(): void {
    method hasRenderer (line 238) | public hasRenderer(): boolean {
    method setRenderer (line 242) | public setRenderer(renderer: IRenderer): void {
    method addRefreshCallback (line 254) | public addRefreshCallback(callback: FrameRequestCallback): number {
    method _fullRefresh (line 258) | private _fullRefresh(): void {
    method clearTextureAtlas (line 266) | public clearTextureAtlas(): void {
    method handleDevicePixelRatioChange (line 274) | public handleDevicePixelRatioChange(): void {
    method handleResize (line 286) | public handleResize(cols: number, rows: number): void {
    method handleCharSizeChanged (line 299) | public handleCharSizeChanged(): void {
    method handleBlur (line 303) | public handleBlur(): void {
    method handleFocus (line 307) | public handleFocus(): void {
    method handleSelectionChanged (line 311) | public handleSelectionChanged(start: [number, number] | undefined, end...
    method handleCursorMove (line 318) | public handleCursorMove(): void {
    method clear (line 322) | public clear(): void {
  class SynchronizedOutputHandler (line 332) | class SynchronizedOutputHandler {
    method constructor (line 338) | constructor(
    method bufferRows (line 344) | public bufferRows(start: number, end: number): void {
    method flush (line 361) | public flush(): { start: number, end: number } | undefined {
    method dispose (line 376) | public dispose(): void {

FILE: src/browser/services/SelectionService.test.ts
  class TestSelectionService (line 18) | class TestSelectionService extends SelectionService {
    method constructor (line 19) | constructor(
    method model (line 27) | public get model(): SelectionModel { return this._model; }
    method selectionMode (line 29) | public set selectionMode(mode: SelectionMode) { this._activeSelectionM...
    method selectLineAt (line 31) | public selectLineAt(line: number): void { this._selectLineAt(line); }
    method selectWordAt (line 32) | public selectWordAt(coords: [number, number]): void { this._selectWord...
    method areCoordsInSelection (line 33) | public areCoordsInSelection(coords: [number, number], start: [number, ...
    method enable (line 36) | public enable(): void {}
    method disable (line 37) | public disable(): void {}
    method refresh (line 38) | public refresh(): void {}
  function stringToRow (line 57) | function stringToRow(text: string): IBufferLine {
  function stringArrayToRow (line 65) | function stringArrayToRow(chars: string[]): IBufferLine {

FILE: src/browser/services/SelectionService.ts
  constant DRAG_SCROLL_MAX_THRESHOLD (line 25) | const DRAG_SCROLL_MAX_THRESHOLD = 50;
  constant DRAG_SCROLL_MAX_SPEED (line 30) | const DRAG_SCROLL_MAX_SPEED = 15;
  constant DRAG_SCROLL_INTERVAL (line 35) | const DRAG_SCROLL_INTERVAL = 50;
  constant ALT_CLICK_MOVE_CURSOR_TIME (line 41) | const ALT_CLICK_MOVE_CURSOR_TIME = 500;
  constant NON_BREAKING_SPACE_CHAR (line 43) | const NON_BREAKING_SPACE_CHAR = String.fromCharCode(160);
  constant ALL_NON_BREAKING_SPACE_REGEX (line 44) | const ALL_NON_BREAKING_SPACE_REGEX = new RegExp(NON_BREAKING_SPACE_CHAR,...
  type IWordPosition (line 49) | interface IWordPosition {
  type SelectionMode (line 57) | const enum SelectionMode {
  class SelectionService (line 72) | class SelectionService extends Disposable implements ISelectionService {
    method constructor (line 123) | constructor(
    method reset (line 165) | public reset(): void {
    method disable (line 173) | public disable(): void {
    method enable (line 181) | public enable(): void {
    method selectionStart (line 185) | public get selectionStart(): [number, number] | undefined { return thi...
    method selectionEnd (line 186) | public get selectionEnd(): [number, number] | undefined { return this....
    method hasSelection (line 191) | public get hasSelection(): boolean {
    method selectionText (line 203) | public get selectionText(): string {
    method clearSelection (line 267) | public clearSelection(): void {
    method refresh (line 279) | public refresh(isLinuxMouseSelection?: boolean): void {
    method _refresh (line 299) | private _refresh(): void {
    method _isClickInSelection (line 312) | private _isClickInSelection(event: MouseEvent): boolean {
    method isCellInSelection (line 324) | public isCellInSelection(x: number, y: number): boolean {
    method _areCoordsInSelection (line 333) | protected _areCoordsInSelection(coords: [number, number], start: [numb...
    method _selectWordAtCursor (line 344) | private _selectWordAtCursor(event: MouseEvent, allowWhitespaceOnlySele...
    method selectAll (line 366) | public selectAll(): void {
    method selectLines (line 372) | public selectLines(start: number, end: number): void {
    method _handleTrim (line 386) | private _handleTrim(amount: number): void {
    method _getMouseBufferCoords (line 397) | private _getMouseBufferCoords(event: MouseEvent): [number, number] | u...
    method _getMouseEventScrollAmount (line 417) | private _getMouseEventScrollAmount(event: MouseEvent): number {
    method shouldForceSelection (line 437) | public shouldForceSelection(event: MouseEvent): boolean {
    method handleMouseDown (line 449) | public handleMouseDown(event: MouseEvent): void {
    method _addMouseDownListeners (line 497) | private _addMouseDownListeners(): void {
    method _removeMouseDownListeners (line 509) | private _removeMouseDownListeners(): void {
    method _handleIncrementalClick (line 523) | private _handleIncrementalClick(event: MouseEvent): void {
    method _handleSingleClick (line 534) | private _handleSingleClick(event: MouseEvent): void {
    method _handleDoubleClick (line 576) | private _handleDoubleClick(event: MouseEvent): void {
    method _handleTripleClick (line 587) | private _handleTripleClick(event: MouseEvent): void {
    method shouldColumnSelect (line 599) | public shouldColumnSelect(event: KeyboardEvent | MouseEvent): boolean {
    method _handleMouseMove (line 608) | private _handleMouseMove(event: MouseEvent): void {
    method _dragScroll (line 681) | private _dragScroll(): void {
    method _handleMouseUp (line 711) | private _handleMouseUp(event: MouseEvent): void {
    method _fireEventIfSelectionChanged (line 735) | private _fireEventIfSelectionChanged(): void {
    method _fireOnSelectionChange (line 760) | private _fireOnSelectionChange(start: [number, number] | undefined, en...
    method _handleBufferActivate (line 767) | private _handleBufferActivate(e: {activeBuffer: IBuffer, inactiveBuffe...
    method _convertViewportColToCharacterIndex (line 783) | private _convertViewportColToCharacterIndex(bufferLine: IBufferLine, x...
    method setSelection (line 801) | public setSelection(col: number, row: number, length: number): void {
    method rightClickSelect (line 810) | public rightClickSelect(ev: MouseEvent): void {
    method _getWordAt (line 823) | private _getWordAt(coords: [number, number], allowWhitespaceOnlySelect...
    method _selectWordAt (line 978) | protected _selectWordAt(coords: [number, number], allowWhitespaceOnlyS...
    method _selectToWordAt (line 995) | private _selectToWordAt(coords: [number, number]): void {
    method _isCharWordSeparator (line 1024) | private _isCharWordSeparator(cell: ICellData): boolean {
    method _selectLineAt (line 1037) | protected _selectLineAt(line: number): void {

FILE: src/browser/services/Services.ts
  type ICharSizeService (line 14) | interface ICharSizeService {
  type ICoreBrowserService (line 27) | interface ICoreBrowserService {
  type IMouseCoordsService (line 53) | interface IMouseCoordsService {
  type IMouseService (line 61) | interface IMouseService {
  type IMouseServiceTarget (line 67) | interface IMouseServiceTarget {
  type IRenderService (line 75) | interface IRenderService extends IDisposable {
  type ISelectionService (line 110) | interface ISelectionService {
  type ICharacterJoinerService (line 139) | interface ICharacterJoinerService {
  type IThemeService (line 148) | interface IThemeService {
  type ILinkProviderService (line 165) | interface ILinkProviderService extends IDisposable {
  type ILinkProvider (line 170) | interface ILinkProvider {
  type IKeyboardService (line 175) | interface IKeyboardService {

FILE: src/browser/services/ThemeService.test.ts
  method createLinearGradient (line 22) | createLinearGradient(): any {
  method fillRect (line 26) | fillRect(): void { }
  method getImageData (line 28) | getImageData(): any {

FILE: src/browser/services/ThemeService.ts
  type IRestoreColorSet (line 15) | interface IRestoreColorSet {
  constant DEFAULT_FOREGROUND (line 23) | const DEFAULT_FOREGROUND = css.toColor('#ffffff');
  constant DEFAULT_BACKGROUND (line 24) | const DEFAULT_BACKGROUND = css.toColor('#000000');
  constant DEFAULT_CURSOR (line 25) | const DEFAULT_CURSOR = css.toColor('#ffffff');
  constant DEFAULT_CURSOR_ACCENT (line 26) | const DEFAULT_CURSOR_ACCENT = DEFAULT_BACKGROUND;
  constant DEFAULT_SELECTION (line 27) | const DEFAULT_SELECTION = {
  constant DEFAULT_OVERVIEW_RULER_BORDER (line 31) | const DEFAULT_OVERVIEW_RULER_BORDER = DEFAULT_FOREGROUND;
  class ThemeService (line 33) | class ThemeService extends Disposable implements IThemeService {
    method colors (line 41) | public get colors(): ReadonlyColorSet { return this._colors; }
    method constructor (line 46) | constructor(
    method _setTheme (line 81) | private _setTheme(theme: ITheme = {}): void {
    method restoreColor (line 142) | public restoreColor(slot?: AllColorIndex): void {
    method _restoreColor (line 147) | private _restoreColor(slot: AllColorIndex | undefined): void {
    method modifyColors (line 170) | public modifyColors(callback: (colors: IColorSet) => void): void {
    method _updateRestoreColors (line 176) | private _updateRestoreColors(): void {
  function parseColor (line 186) | function parseColor(

FILE: src/browser/shared/Constants.ts
  type ViewportConstants (line 6) | const enum ViewportConstants {

FILE: src/common/Async.ts
  function timeout (line 10) | function timeout(millis: number): Promise<void> {
  function disposableTimeout (line 21) | function disposableTimeout(handler: () => void, timeout = 0, store?: Dis...
  class TimeoutTimer (line 35) | class TimeoutTimer implements IDisposable {
    method dispose (line 39) | public dispose(): void {
    method cancel (line 44) | public cancel(): void {
    method cancelAndSet (line 51) | public cancelAndSet(runner: () => void, timeout: number): void {
    method setIfNotSet (line 62) | public setIfNotSet(runner: () => void, timeout: number): void {
  class IntervalTimer (line 76) | class IntervalTimer implements IDisposable {
    method cancel (line 80) | public cancel(): void {
    method cancelAndSet (line 85) | public cancelAndSet(runner: () => void, interval: number, context: Win...
    method dispose (line 101) | public dispose(): void {

FILE: src/common/CircularList.ts
  type IInsertEvent (line 10) | interface IInsertEvent {
  type IDeleteEvent (line 15) | interface IDeleteEvent {
  class CircularList (line 24) | class CircularList<T> extends Disposable implements ICircularList<T> {
    method constructor (line 36) | constructor(
    method maxLength (line 45) | public get maxLength(): number {
    method maxLength (line 49) | public set maxLength(newMaxLength: number) {
    method length (line 66) | public get length(): number {
    method length (line 70) | public set length(newLength: number) {
    method get (line 87) | public get(index: number): T | undefined {
    method set (line 99) | public set(index: number, value: T | undefined): void {
    method push (line 108) | public push(value: T): void {
    method recycle (line 123) | public recycle(): T {
    method isFull (line 135) | public get isFull(): boolean {
    method pop (line 143) | public pop(): T | undefined {
    method splice (line 156) | public splice(start: number, deleteCount: number, ...items: T[]): void {
    method trimStart (line 192) | public trimStart(count: number): void {
    method shiftElements (line 201) | public shiftElements(start: number, count: number, offset: number): vo...
    method _getCyclicIndex (line 238) | private _getCyclicIndex(index: number): number {

FILE: src/common/Clone.ts
  function clone (line 9) | function clone<T>(val: T, depth: number = 5): T {

FILE: src/common/Color.ts
  constant NULL_COLOR (line 13) | const NULL_COLOR: IColor = {
  function toCss (line 22) | function toCss(r: number, g: number, b: number, a?: number): string {
  function toRgba (line 29) | function toRgba(r: number, g: number, b: number, a: number = 0xFF): numb...
  function toColor (line 36) | function toColor(r: number, g: number, b: number, a?: number): IColor {
  function blend (line 48) | function blend(bg: IColor, fg: IColor): IColor {
  function isOpaque (line 70) | function isOpaque(color: IColor): boolean {
  function ensureContrastRatio (line 74) | function ensureContrastRatio(bg: IColor, fg: IColor, ratio: number): ICo...
  function opaque (line 86) | function opaque(color: IColor): IColor {
  function opacity (line 95) | function opacity(color: IColor, opacity: number): IColor {
  function multiplyOpacity (line 104) | function multiplyOpacity(color: IColor, factor: number): IColor {
  function toColorRGB (line 109) | function toColorRGB(color: IColor): IColorRGB {
  function toColor (line 147) | function toColor(css: string): IColor {
  function relativeLuminance (line 236) | function relativeLuminance(rgb: number): number {
  function relativeLuminance2 (line 251) | function relativeLuminance2(r: number, g: number, b: number): number {
  function blend (line 266) | function blend(bg: number, fg: number): number {
  function ensureContrastRatio (line 296) | function ensureContrastRatio(bgRgba: number, fgRgba: number, ratio: numb...
  function reduceLuminance (line 323) | function reduceLuminance(bgRgba: number, fgRgba: number, ratio: number):...
  function increaseLuminance (line 343) | function increaseLuminance(bgRgba: number, fgRgba: number, ratio: number...
  function toChannels (line 363) | function toChannels(value: number): [number, number, number, number] {
  function toPaddedHex (line 368) | function toPaddedHex(c: number): string {
  function contrastRatio (line 379) | function contrastRatio(l1: number, l2: number): number {

FILE: src/common/CoreTerminal.ts
  method onScroll (line 81) | public get onScroll(): IEvent<number> {
  method cols (line 91) | public get cols(): number { return this._bufferService.cols; }
  method rows (line 92) | public get rows(): number { return this._bufferService.rows; }
  method buffers (line 93) | public get buffers(): IBufferSet { return this._bufferService.buffers; }
  method options (line 94) | public get options(): Required<ITerminalOptions> { return this.optionsSe...
  method options (line 95) | public set options(options: ITerminalOptions) {
  method constructor (line 101) | constructor(
  method write (line 146) | public write(data: string | Uint8Array, callback?: () => void): void {
  method writeSync (line 159) | public writeSync(data: string | Uint8Array, maxSubsequentCalls?: number)...
  method input (line 167) | public input(data: string, wasUserInput: boolean = true): void {
  method resize (line 171) | public resize(x: number, y: number): void {
  method scroll (line 191) | public scroll(eraseAttr: IAttributeData, isWrapped: boolean = false): vo...
  method scrollLines (line 20
Condensed preview — 696 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,939K chars).
[
  {
    "path": ".devcontainer/devcontainer.json",
    "chars": 482,
    "preview": "{\n  \"name\": \"xterm.js\",\n  \"image\": \"mcr.microsoft.com/devcontainers/typescript-node:22-bookworm\",\n  \"features\": {\n    \"g"
  },
  {
    "path": ".editorconfig",
    "chars": 214,
    "preview": "root = true\n\n[*]\nindent_style = space\nindent_size = 2\ninsert_final_newline = true\ntrim_trailing_whitespace = true\n\n[*.{j"
  },
  {
    "path": ".gitattributes",
    "chars": 12,
    "preview": "* text=auto\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "chars": 273,
    "preview": "---\nname: Bug report\nabout: Create a bug report\n---\n\n<!-- ⚠️ Please search existing issues to avoid creating duplicates."
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 354,
    "preview": "blank_issues_enabled: false\ncontact_links:\n  - name: FAQ\n    url:  https://github.com/xtermjs/xterm.js/wiki/FAQ\n    abou"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "chars": 186,
    "preview": "---\nname: Feature request\nabout: Suggest a feature or enhancement\n---\n\n<!-- ⚠️ Please search existing issues to avoid cr"
  },
  {
    "path": ".github/copilot-instructions.md",
    "chars": 3430,
    "preview": "# xterm.js Copilot Instructions\n\n## Architecture Overview\n\n**Core Structure**: xterm.js is a multi-target terminal emula"
  },
  {
    "path": ".github/hooks/setupRepo.json",
    "chars": 117,
    "preview": "{\n\t\"hooks\": {\n\t\t\"SessionStart\": [\n\t\t\t{\n\t\t\t\t\"type\": \"command\",\n\t\t\t\t\"command\": \"npm run agent:setup-repo\"\n\t\t\t}\n\t\t]\n\t}\n}"
  },
  {
    "path": ".github/instructions/benchmark.instructions.md",
    "chars": 727,
    "preview": "---\napplyTo: '**/*.benchmark.ts'\n---\n# Benchmark run instructions\n\n- Full suite: `npm run benchmark`\n- Single benchmark "
  },
  {
    "path": ".github/instructions/unit-test.instructions.md",
    "chars": 331,
    "preview": "---\napplyTo: '**/*.test.ts'\n---\nWhen writing unit tests follow these rules:\n\n- When writing unit tests for addons, alway"
  },
  {
    "path": ".github/workflows/ci.yml",
    "chars": 9141,
    "preview": "name: CI\n\non:\n  push:\n    branches: [ \"master\" ]\n  pull_request:\n    branches: [ \"master\" ]\n\njobs:\n  build:\n    runs-on:"
  },
  {
    "path": ".github/workflows/codeql-analysis.yml",
    "chars": 722,
    "preview": "name: \"CodeQL\"\n\non:\n  push:\n    branches: [ \"master\" ]\n  pull_request:\n    branches: [ \"master\" ]\n  schedule:\n    - cron"
  },
  {
    "path": ".github/workflows/copilot-setup-steps.yml",
    "chars": 668,
    "preview": "name: \"Copilot Setup Steps\"\n\non:\n  workflow_dispatch:\n  push:\n    paths:\n      - .github/workflows/copilot-setup-steps.y"
  },
  {
    "path": ".github/workflows/release.yml",
    "chars": 722,
    "preview": "name: Release\n\non:\n  push:\n    # If a commit reaches master, assume it has passed CI via PR and publish\n    # without ru"
  },
  {
    "path": ".gitignore",
    "chars": 347,
    "preview": "node_modules/\n*.swp\n.lock-wscript\nlib/\nout/\nout-demo/\nout-test/\nout-esbuild/\nout-esbuild-test/\n.nyc_output/\nMakefile.gyp"
  },
  {
    "path": ".gitmodules",
    "chars": 0,
    "preview": ""
  },
  {
    "path": ".npmignore",
    "chars": 641,
    "preview": "# Blacklist - exclude everything except npm defaults such as LICENSE, etc\n*\n!*/\n\n# Whitelist - css/\n!css/**/*.css\n\n# Whi"
  },
  {
    "path": ".nvmrc",
    "chars": 3,
    "preview": "22\n"
  },
  {
    "path": ".vscode/extensions.json",
    "chars": 67,
    "preview": "{\n    \"recommendations\": [\n        \"dbaeumer.vscode-eslint\"\n    ]\n}"
  },
  {
    "path": ".vscode/launch.json",
    "chars": 1926,
    "preview": "{\n  \"version\": \"0.2.0\",\n  \"configurations\": [\n    {\n      \"type\": \"node\",\n      \"request\": \"launch\",\n      \"name\": \"Unit"
  },
  {
    "path": ".vscode/settings.json",
    "chars": 118,
    "preview": "{\n  \"typescript.preferences.importModuleSpecifier\": \"non-relative\",\n  \"typescript.preferences.quoteStyle\": \"single\"\n}\n"
  },
  {
    "path": ".vscode/tasks.json",
    "chars": 2370,
    "preview": "{\n  \"version\": \"2.0.0\",\n  \"presentation\": {\n    \"echo\": false,\n    \"reveal\": \"always\",\n    \"focus\": false,\n    \"panel\": "
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "chars": 3285,
    "preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, w"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 4643,
    "preview": "# How to contribute to xterm.js\n\n- [Contributing code](#contributing-code)\n- [Opening issues](#opening-issues)\n- [Answer"
  },
  {
    "path": "LICENSE",
    "chars": 1261,
    "preview": "Copyright (c) 2017-2019, The xterm.js authors (https://github.com/xtermjs/xterm.js)\nCopyright (c) 2014-2016, SourceLair "
  },
  {
    "path": "README.md",
    "chars": 24004,
    "preview": "# [![xterm.js](images/logo-full.png)](https://xtermjs.org)\n\nXterm.js is a frontend component that enables applications t"
  },
  {
    "path": "addons/addon-attach/.gitignore",
    "chars": 17,
    "preview": "lib\nnode_modules\n"
  },
  {
    "path": "addons/addon-attach/.npmignore",
    "chars": 433,
    "preview": "# Blacklist - exclude everything except npm defaults such as LICENSE, etc\n*\n!*/\n\n# Whitelist - lib/\n!lib/**/*.d.ts\n\n!lib"
  },
  {
    "path": "addons/addon-attach/LICENSE",
    "chars": 1103,
    "preview": "Copyright (c) 2017, The xterm.js authors (https://github.com/xtermjs/xterm.js)\n\nPermission is hereby granted, free of ch"
  },
  {
    "path": "addons/addon-attach/README.md",
    "chars": 593,
    "preview": "## @xterm/addon-attach\n\nAn addon for [xterm.js](https://github.com/xtermjs/xterm.js) that enables attaching to a web soc"
  },
  {
    "path": "addons/addon-attach/package.json",
    "chars": 662,
    "preview": "{\n  \"name\": \"@xterm/addon-attach\",\n  \"version\": \"0.12.0\",\n  \"author\": {\n    \"name\": \"The xterm.js authors\",\n    \"url\": \""
  },
  {
    "path": "addons/addon-attach/src/AttachAddon.ts",
    "chars": 2899,
    "preview": "/**\n * Copyright (c) 2014, 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Implements the attach m"
  },
  {
    "path": "addons/addon-attach/src/tsconfig.json",
    "chars": 476,
    "preview": "{\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"target\": \"es2021\",\n    \"lib\": [\n      \"dom\",\n      \"es2015\"\n    "
  },
  {
    "path": "addons/addon-attach/test/AttachAddon.test.ts",
    "chars": 1484,
    "preview": "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport WebSocket = require('ws"
  },
  {
    "path": "addons/addon-attach/test/playwright.config.ts",
    "chars": 592,
    "preview": "import { PlaywrightTestConfig } from '@playwright/test';\n\nconst config: PlaywrightTestConfig = {\n  testDir: '.',\n  timeo"
  },
  {
    "path": "addons/addon-attach/test/tsconfig.json",
    "chars": 724,
    "preview": "{\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"target\": \"ESNext\",\n    \"lib\": [\n      \"es2021\",\n    ],\n    \"root"
  },
  {
    "path": "addons/addon-attach/tsconfig.json",
    "chars": 108,
    "preview": "{\n  \"files\": [],\n  \"include\": [],\n  \"references\": [\n    { \"path\": \"./src\" },\n    { \"path\": \"./test\" }\n  ]\n}\n"
  },
  {
    "path": "addons/addon-attach/typings/addon-attach.d.ts",
    "chars": 546,
    "preview": "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Terminal, ITerminalAd"
  },
  {
    "path": "addons/addon-attach/webpack.config.js",
    "chars": 706,
    "preview": "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nconst path = require('path');\n"
  },
  {
    "path": "addons/addon-clipboard/.gitignore",
    "chars": 17,
    "preview": "lib\nnode_modules\n"
  },
  {
    "path": "addons/addon-clipboard/.npmignore",
    "chars": 433,
    "preview": "# Blacklist - exclude everything except npm defaults such as LICENSE, etc\n*\n!*/\n\n# Whitelist - lib/\n!lib/**/*.d.ts\n\n!lib"
  },
  {
    "path": "addons/addon-clipboard/LICENSE",
    "chars": 1103,
    "preview": "Copyright (c) 2023, The xterm.js authors (https://github.com/xtermjs/xterm.js)\n\nPermission is hereby granted, free of ch"
  },
  {
    "path": "addons/addon-clipboard/README.md",
    "chars": 1455,
    "preview": "## @xterm/addon-clipboard\n\nAn addon for [xterm.js](https://github.com/xtermjs/xterm.js) that enables\naccessing the syste"
  },
  {
    "path": "addons/addon-clipboard/package.json",
    "chars": 727,
    "preview": "{\n  \"name\": \"@xterm/addon-clipboard\",\n  \"version\": \"0.2.0\",\n  \"author\": {\n    \"name\": \"The xterm.js authors\",\n    \"url\":"
  },
  {
    "path": "addons/addon-clipboard/src/ClipboardAddon.ts",
    "chars": 2690,
    "preview": "/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { IDisposable, ITe"
  },
  {
    "path": "addons/addon-clipboard/src/tsconfig.json",
    "chars": 617,
    "preview": "{\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"target\": \"es2021\",\n    \"lib\": [\n      \"dom\",\n      \"es2015\"\n    "
  },
  {
    "path": "addons/addon-clipboard/test/ClipboardAddon.test.ts",
    "chars": 2811,
    "preview": "/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport test from '@playwright/"
  },
  {
    "path": "addons/addon-clipboard/test/playwright.config.ts",
    "chars": 592,
    "preview": "import { PlaywrightTestConfig } from '@playwright/test';\n\nconst config: PlaywrightTestConfig = {\n  testDir: '.',\n  timeo"
  },
  {
    "path": "addons/addon-clipboard/test/tsconfig.json",
    "chars": 724,
    "preview": "{\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"target\": \"ESNext\",\n    \"lib\": [\n      \"es2021\",\n    ],\n    \"root"
  },
  {
    "path": "addons/addon-clipboard/tsconfig.json",
    "chars": 108,
    "preview": "{\n  \"files\": [],\n  \"include\": [],\n  \"references\": [\n    { \"path\": \"./src\" },\n    { \"path\": \"./test\" }\n  ]\n}\n"
  },
  {
    "path": "addons/addon-clipboard/typings/addon-clipboard.d.ts",
    "chars": 3426,
    "preview": "/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Terminal, ITerminalAd"
  },
  {
    "path": "addons/addon-clipboard/webpack.config.js",
    "chars": 589,
    "preview": "/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nconst path = require('path');\n"
  },
  {
    "path": "addons/addon-fit/.gitignore",
    "chars": 17,
    "preview": "lib\nnode_modules\n"
  },
  {
    "path": "addons/addon-fit/.npmignore",
    "chars": 433,
    "preview": "# Blacklist - exclude everything except npm defaults such as LICENSE, etc\n*\n!*/\n\n# Whitelist - lib/\n!lib/**/*.d.ts\n\n!lib"
  },
  {
    "path": "addons/addon-fit/LICENSE",
    "chars": 1103,
    "preview": "Copyright (c) 2019, The xterm.js authors (https://github.com/xtermjs/xterm.js)\n\nPermission is hereby granted, free of ch"
  },
  {
    "path": "addons/addon-fit/README.md",
    "chars": 638,
    "preview": "## @xterm/addon-fit\n\nAn addon for [xterm.js](https://github.com/xtermjs/xterm.js) that enables fitting the terminal's di"
  },
  {
    "path": "addons/addon-fit/package.json",
    "chars": 647,
    "preview": "{\n  \"name\": \"@xterm/addon-fit\",\n  \"version\": \"0.11.0\",\n  \"author\": {\n    \"name\": \"The xterm.js authors\",\n    \"url\": \"htt"
  },
  {
    "path": "addons/addon-fit/src/FitAddon.ts",
    "chars": 3212,
    "preview": "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { Terminal, ITermi"
  },
  {
    "path": "addons/addon-fit/src/tsconfig.json",
    "chars": 605,
    "preview": "{\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"target\": \"es2021\",\n    \"lib\": [\n      \"dom\",\n      \"es2015\"\n    "
  },
  {
    "path": "addons/addon-fit/test/FitAddon.test.ts",
    "chars": 4659,
    "preview": "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport test from '@playwright/"
  },
  {
    "path": "addons/addon-fit/test/playwright.config.ts",
    "chars": 592,
    "preview": "import { PlaywrightTestConfig } from '@playwright/test';\n\nconst config: PlaywrightTestConfig = {\n  testDir: '.',\n  timeo"
  },
  {
    "path": "addons/addon-fit/test/tsconfig.json",
    "chars": 724,
    "preview": "{\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"target\": \"ESNext\",\n    \"lib\": [\n      \"es2021\",\n    ],\n    \"root"
  },
  {
    "path": "addons/addon-fit/tsconfig.json",
    "chars": 108,
    "preview": "{\n  \"files\": [],\n  \"include\": [],\n  \"references\": [\n    { \"path\": \"./src\" },\n    { \"path\": \"./test\" }\n  ]\n}\n"
  },
  {
    "path": "addons/addon-fit/typings/addon-fit.d.ts",
    "chars": 1181,
    "preview": "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Terminal, ITerminalAd"
  },
  {
    "path": "addons/addon-fit/webpack.config.js",
    "chars": 700,
    "preview": "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nconst path = require('path');\n"
  },
  {
    "path": "addons/addon-image/.gitignore",
    "chars": 440,
    "preview": "node_modules/\n*.swp\n.lock-wscript\nlib/\nout/\nout-test/\nout-worker/\n.nyc_output/\nMakefile.gyp\n*.Makefile\n*.target.gyp.mk\n*"
  },
  {
    "path": "addons/addon-image/.npmignore",
    "chars": 140,
    "preview": ".github\nfixture\noverwrite\nbootstrap.sh\ntsconfig.json\nwebpack.config.js\ntest\nout-test\nout-esbuild\nout-esbuild-test\ninwasm"
  },
  {
    "path": "addons/addon-image/LICENSE",
    "chars": 1126,
    "preview": "Copyright (c) 2019, 2020, 2021, 2022, 2023 The xterm.js authors (https://github.com/xtermjs/xterm.js)\n\nPermission is her"
  },
  {
    "path": "addons/addon-image/README.md",
    "chars": 13823,
    "preview": "## @xterm/addon-image\n\nInline image output in xterm.js. Supports SIXEL and iTerm's inline image protocol (IIP).\n\n\n![](fi"
  },
  {
    "path": "addons/addon-image/fixture/endless.sh",
    "chars": 435,
    "preview": "#!/bin/bash\n\n# sixel endless mode\n# Should print an endless sine curve, abort with Ctrl-C.\n\nperiod=200\namplitude=50\n\nsix"
  },
  {
    "path": "addons/addon-image/fixture/gcrglf.sh",
    "chars": 4937,
    "preview": "#!/bin/bash\n\n# GLF should move the text cursor downwards,\n# even if no pixels were modified,\n# when sixel scrolling is o"
  },
  {
    "path": "addons/addon-image/fixture/growing_rect.js",
    "chars": 1289,
    "preview": "const sixelEncode = require('../node_modules/sixel/lib/SixelEncoder').image2sixel;\nconst toRGBA8888 = require('../node_m"
  },
  {
    "path": "addons/addon-image/fixture/iip/palette.iip",
    "chars": 758,
    "preview": "\u001b]1337;File=inline=1;size=525;name=Li4vcGFsZXR0ZS5wbmc=:iVBORw0KGgoAAAANSUhEUgAAAoAAAABQCAYAAACJbMQlAAAABmJLR0QA/wD/AP+g"
  },
  {
    "path": "addons/addon-image/fixture/iip/spinfox.iip",
    "chars": 817841,
    "preview": "\u001b]1337;File=inline=1;size=613321;name=Li4vdGVzdGltYWdlcy9zcGluZm94LnBuZw==:iVBORw0KGgoAAAANSUhEUgAAAJQAAACUCAYAAAB1PADUA"
  },
  {
    "path": "addons/addon-image/fixture/iip/w3c_gif.iip",
    "chars": 2303,
    "preview": "\u001b]1337;File=inline=1;size=1667;name=Li4vdGVzdGltYWdlcy93M2NfaG9tZV8yNTYuZ2lm:R0lGODlhSAAwAPcAAAQCBIyKjMzOzERGRHSOvAxCnLy"
  },
  {
    "path": "addons/addon-image/fixture/iip/w3c_jpg.iip",
    "chars": 2959,
    "preview": "\u001b]1337;File=inline=1;size=2159;name=Li4vdGVzdGltYWdlcy93M2NfaG9tZV8yNTYuanBn:/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAYEBQYFBAY"
  },
  {
    "path": "addons/addon-image/fixture/iip/w3c_png.iip",
    "chars": 2291,
    "preview": "\u001b]1337;File=inline=1;size=1658;name=Li4vdGVzdGltYWdlcy93M2NfaG9tZV8yNTYucG5n:iVBORw0KGgoAAAANSUhEUgAAAEgAAAAwCAMAAACFQsz"
  },
  {
    "path": "addons/addon-image/fixture/inspect_palette.sh",
    "chars": 1460,
    "preview": "#!/bin/bash\n\nfunction print_palette() {\n  L=$(( LOWER / 256))\n  U=$(( (UPPER-1) / 256))\n  for ((p = $L; p <= $U; p++))\n "
  },
  {
    "path": "addons/addon-image/fixture/overdraw.sh",
    "chars": 1661,
    "preview": "#!/bin/bash\n\nfunction smiling_smiley() {\n  echo -ne '\\x1bP;2q\"1;1;60;60\n#6!60~$-\n!60~$-\n!60~$\n!15?#1!4]!22?!4]$-\n#6!60~$"
  },
  {
    "path": "addons/addon-image/fixture/palette.sixel",
    "chars": 23926,
    "preview": "\u001bP0;0;q\"1;1;640;80#0;2;0;0;0#1;2;0;13;0#2;2;0;25;0#3;2;0;38;0#4;2;0;50;0#5;2;0;63;0#6;2;0;75;0#7;2;0;88;0#8;2;13;0;0#9;2"
  },
  {
    "path": "addons/addon-image/fixture/textcursor.sh",
    "chars": 9608,
    "preview": "#!/bin/bash\n\n# Test cursor row, column placement after sixel image is sent.\n\n# After a sixel image is displayed, the tex"
  },
  {
    "path": "addons/addon-image/package.json",
    "chars": 737,
    "preview": "{\n  \"name\": \"@xterm/addon-image\",\n  \"version\": \"0.9.0\",\n  \"author\": {\n    \"name\": \"The xterm.js authors\",\n    \"url\": \"ht"
  },
  {
    "path": "addons/addon-image/src/IIPHandler.ts",
    "chars": 6023,
    "preview": "/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IImageAddonOptions, IO"
  },
  {
    "path": "addons/addon-image/src/IIPHeaderParser.test.ts",
    "chars": 4568,
    "preview": "/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { assert } from 'chai';"
  },
  {
    "path": "addons/addon-image/src/IIPHeaderParser.ts",
    "chars": 4896,
    "preview": "/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n// eslint-disable-next-line\nde"
  },
  {
    "path": "addons/addon-image/src/IIPImageStorage.ts",
    "chars": 656,
    "preview": "/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ImageStorage } from '"
  },
  {
    "path": "addons/addon-image/src/IIPMetrics.test.ts",
    "chars": 1974,
    "preview": "/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { assert } from 'chai';"
  },
  {
    "path": "addons/addon-image/src/IIPMetrics.ts",
    "chars": 1880,
    "preview": "/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n\nexport type ImageType = 'imag"
  },
  {
    "path": "addons/addon-image/src/ImageAddon.ts",
    "chars": 11734,
    "preview": "/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ITerminalAddon, "
  },
  {
    "path": "addons/addon-image/src/ImageRenderer.ts",
    "chars": 15060,
    "preview": "/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { toRGBA8888 } from 'si"
  },
  {
    "path": "addons/addon-image/src/ImageStorage.ts",
    "chars": 21886,
    "preview": "/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '@"
  },
  {
    "path": "addons/addon-image/src/SixelHandler.ts",
    "chars": 4822,
    "preview": "/**\n * Copyright (c) 2020, 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { SixelImageStora"
  },
  {
    "path": "addons/addon-image/src/SixelImageStorage.ts",
    "chars": 1604,
    "preview": "/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ImageStorage, CELL_SI"
  },
  {
    "path": "addons/addon-image/src/Types.ts",
    "chars": 3527,
    "preview": "/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable, IMarker,"
  },
  {
    "path": "addons/addon-image/src/kitty/KittyGraphicsHandler.ts",
    "chars": 29684,
    "preview": "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '@"
  },
  {
    "path": "addons/addon-image/src/kitty/KittyGraphicsTypes.test.ts",
    "chars": 5108,
    "preview": "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { assert } from 'chai';\n"
  },
  {
    "path": "addons/addon-image/src/kitty/KittyGraphicsTypes.ts",
    "chars": 6264,
    "preview": "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Kitty graphics protocol types"
  },
  {
    "path": "addons/addon-image/src/kitty/KittyImageStorage.ts",
    "chars": 5527,
    "preview": "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '@"
  },
  {
    "path": "addons/addon-image/src/tsconfig.json",
    "chars": 664,
    "preview": "{\n  \"compilerOptions\": {\n    \"target\": \"es2017\",\n    \"module\": \"commonjs\",\n    \"sourceMap\": true,\n    \"outDir\": \"../out\""
  },
  {
    "path": "addons/addon-image/test/ImageAddon.test.ts",
    "chars": 14173,
    "preview": "/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport test from '@playwright/"
  },
  {
    "path": "addons/addon-image/test/KittyGraphics.test.ts",
    "chars": 95518,
    "preview": "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport test from '@playwright/"
  },
  {
    "path": "addons/addon-image/test/playwright.config.ts",
    "chars": 592,
    "preview": "import { PlaywrightTestConfig } from '@playwright/test';\n\nconst config: PlaywrightTestConfig = {\n  testDir: '.',\n  timeo"
  },
  {
    "path": "addons/addon-image/test/tsconfig.json",
    "chars": 724,
    "preview": "{\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"target\": \"ESNext\",\n    \"lib\": [\n      \"es2021\",\n    ],\n    \"root"
  },
  {
    "path": "addons/addon-image/tsconfig.json",
    "chars": 108,
    "preview": "{\n  \"files\": [],\n  \"include\": [],\n  \"references\": [\n    { \"path\": \"./src\" },\n    { \"path\": \"./test\" }\n  ]\n}\n"
  },
  {
    "path": "addons/addon-image/typings/addon-image.d.ts",
    "chars": 4343,
    "preview": "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Terminal, ITerminalAd"
  },
  {
    "path": "addons/addon-image/webpack.config.js",
    "chars": 962,
    "preview": "/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nconst path = require('path');\n"
  },
  {
    "path": "addons/addon-ligatures/.gitignore",
    "chars": 85,
    "preview": "node_modules/\n.nyc_output/\ncoverage/\n\nlib/\n\n.env\n.vscode/\n*.swp\n*.tgz\nnpm-debug.log*\n"
  },
  {
    "path": "addons/addon-ligatures/.npmignore",
    "chars": 433,
    "preview": "# Blacklist - exclude everything except npm defaults such as LICENSE, etc\n*\n!*/\n\n# Whitelist - lib/\n!lib/**/*.d.ts\n\n!lib"
  },
  {
    "path": "addons/addon-ligatures/LICENSE",
    "chars": 2298,
    "preview": "Copyright (c) 2019, The xterm.js authors (https://github.com/xtermjs/xterm.js)\n\nPermission is hereby granted, free of ch"
  },
  {
    "path": "addons/addon-ligatures/README.md",
    "chars": 2665,
    "preview": "## @xterm/addon-ligatures\n\nAdd support for programming ligatures to [xterm.js] when running in environments with access "
  },
  {
    "path": "addons/addon-ligatures/package.json",
    "chars": 1108,
    "preview": "{\n  \"name\": \"@xterm/addon-ligatures\",\n  \"version\": \"0.10.0\",\n  \"description\": \"Add support for programming ligatures to "
  },
  {
    "path": "addons/addon-ligatures/src/LigaturesAddon.ts",
    "chars": 2101,
    "preview": "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { Terminal } from "
  },
  {
    "path": "addons/addon-ligatures/src/Types.ts",
    "chars": 190,
    "preview": "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport interface ILigatureOpti"
  },
  {
    "path": "addons/addon-ligatures/src/font.ts",
    "chars": 3962,
    "preview": "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Font, loadBuffer } fr"
  },
  {
    "path": "addons/addon-ligatures/src/fontLigatures/flatten.ts",
    "chars": 1175,
    "preview": "import { ILookupTree, IFlattenedLookupTree, ILookupTreeEntry, IFlattenedLookupTreeEntry } from './types';\n\nexport defaul"
  },
  {
    "path": "addons/addon-ligatures/src/fontLigatures/index.test.ts",
    "chars": 14834,
    "preview": "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport * as path from 'path';\n"
  },
  {
    "path": "addons/addon-ligatures/src/fontLigatures/index.ts",
    "chars": 8180,
    "preview": "import * as opentype from 'opentype.js';\nimport LRUCache = require('lru-cache');\n\nimport { IFont, ILigatureData, IFlatte"
  },
  {
    "path": "addons/addon-ligatures/src/fontLigatures/merge.test.ts",
    "chars": 5101,
    "preview": "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { assert } from 'chai';"
  },
  {
    "path": "addons/addon-ligatures/src/fontLigatures/merge.ts",
    "chars": 12009,
    "preview": "import { ILookupTree, ILookupTreeEntry } from './types';\n\n/**\n * Merges the provided trees into a single lookup tree. Wh"
  },
  {
    "path": "addons/addon-ligatures/src/fontLigatures/mergeRange.test.ts",
    "chars": 1497,
    "preview": "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { assert } from 'chai';"
  },
  {
    "path": "addons/addon-ligatures/src/fontLigatures/mergeRange.ts",
    "chars": 2283,
    "preview": "/**\n * Merges the range defined by the provided start and end into the list of\n * existing ranges. The merge is done in "
  },
  {
    "path": "addons/addon-ligatures/src/fontLigatures/processors/6-1.ts",
    "chars": 2518,
    "preview": "import { ChainingContextualSubstitutionTable, Lookup } from '../tables';\nimport { ILookupTree } from '../types';\n\nimport"
  },
  {
    "path": "addons/addon-ligatures/src/fontLigatures/processors/6-2.ts",
    "chars": 3196,
    "preview": "import { ChainingContextualSubstitutionTable, Lookup } from '../tables';\nimport { ILookupTree } from '../types';\nimport "
  },
  {
    "path": "addons/addon-ligatures/src/fontLigatures/processors/6-3.ts",
    "chars": 2385,
    "preview": "import { ChainingContextualSubstitutionTable, Lookup } from '../tables';\nimport { ILookupTree } from '../types';\n\nimport"
  },
  {
    "path": "addons/addon-ligatures/src/fontLigatures/processors/8-1.ts",
    "chars": 2126,
    "preview": "import { IReverseChainingContextualSingleSubstitutionTable } from '../tables';\nimport { ILookupTree, ILookupTreeEntry } "
  },
  {
    "path": "addons/addon-ligatures/src/fontLigatures/processors/classDef.ts",
    "chars": 2551,
    "preview": "import { ClassDefTable } from '../tables';\n\n/**\n * Get the number of the class to which the glyph belongs, or null if it"
  },
  {
    "path": "addons/addon-ligatures/src/fontLigatures/processors/coverage.ts",
    "chars": 1498,
    "preview": "import { CoverageTable } from '../tables';\n\n/**\n * Get the index of the given glyph in the coverage table, or null if it"
  },
  {
    "path": "addons/addon-ligatures/src/fontLigatures/processors/helper.ts",
    "chars": 5385,
    "preview": "import { ILookupTreeEntry, ILookupTree } from '../types';\nimport { ISubstitutionLookupRecord, Lookup } from '../tables';"
  },
  {
    "path": "addons/addon-ligatures/src/fontLigatures/processors/substitution.ts",
    "chars": 2070,
    "preview": "import { SubstitutionTable } from '../tables';\n\nimport getCoverageGlyphIndex from './coverage';\n\n/**\n * Get the substitu"
  },
  {
    "path": "addons/addon-ligatures/src/fontLigatures/tables.ts",
    "chars": 2747,
    "preview": "export type SubstitutionTable = SubstitutionTable.IFormat1 | SubstitutionTable.IFormat2;\nexport namespace SubstitutionTa"
  },
  {
    "path": "addons/addon-ligatures/src/fontLigatures/types.ts",
    "chars": 2016,
    "preview": "export interface ISubstitutionResult {\n  index: number;\n  contextRange: [number, number];\n}\n\n/**\n * Information about li"
  },
  {
    "path": "addons/addon-ligatures/src/fontLigatures/walk.ts",
    "chars": 1750,
    "preview": "import { IFlattenedLookupTree, ILookupResult } from './types';\n\nexport default function walkTree(tree: IFlattenedLookupT"
  },
  {
    "path": "addons/addon-ligatures/src/index.ts",
    "chars": 3308,
    "preview": "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { Terminal } from "
  },
  {
    "path": "addons/addon-ligatures/src/parse.test.ts",
    "chars": 2660,
    "preview": "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { assert } from 'chai';"
  },
  {
    "path": "addons/addon-ligatures/src/parse.ts",
    "chars": 4528,
    "preview": "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\ninterface IParseContext {\n  in"
  },
  {
    "path": "addons/addon-ligatures/src/tsconfig.json",
    "chars": 589,
    "preview": "{\n  \"compilerOptions\": {\n    \"target\": \"es2017\",\n    \"module\": \"commonjs\",\n    \"sourceMap\": true,\n    \"outDir\": \"../out\""
  },
  {
    "path": "addons/addon-ligatures/test/LigaturesAddon.test.ts",
    "chars": 4401,
    "preview": "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport * as path from 'path';\n"
  },
  {
    "path": "addons/addon-ligatures/test/tsconfig.json",
    "chars": 476,
    "preview": "{\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"target\": \"ESNext\",\n    \"lib\": [\n      \"es2021\"\n    ],\n    \"rootD"
  },
  {
    "path": "addons/addon-ligatures/tsconfig.json",
    "chars": 108,
    "preview": "{\n  \"files\": [],\n  \"include\": [],\n  \"references\": [\n    { \"path\": \"./src\" },\n    { \"path\": \"./test\" }\n  ]\n}\n"
  },
  {
    "path": "addons/addon-ligatures/typings/addon-ligatures.d.ts",
    "chars": 2203,
    "preview": "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * This contains the type declar"
  },
  {
    "path": "addons/addon-ligatures/webpack.config.js",
    "chars": 1082,
    "preview": "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nconst path = require('path');\n"
  },
  {
    "path": "addons/addon-progress/.gitignore",
    "chars": 17,
    "preview": "lib\nnode_modules\n"
  },
  {
    "path": "addons/addon-progress/.npmignore",
    "chars": 433,
    "preview": "# Blacklist - exclude everything except npm defaults such as LICENSE, etc\n*\n!*/\n\n# Whitelist - lib/\n!lib/**/*.d.ts\n\n!lib"
  },
  {
    "path": "addons/addon-progress/LICENSE",
    "chars": 1103,
    "preview": "Copyright (c) 2024, The xterm.js authors (https://github.com/xtermjs/xterm.js)\n\nPermission is hereby granted, free of ch"
  },
  {
    "path": "addons/addon-progress/README.md",
    "chars": 3164,
    "preview": "## @xterm/addon-progress\n\nAn xterm.js addon providing an interface for ConEmu's progress sequence.\nSee https://conemu.gi"
  },
  {
    "path": "addons/addon-progress/package.json",
    "chars": 671,
    "preview": "{\n  \"name\": \"@xterm/addon-progress\",\n  \"version\": \"0.2.0\",\n  \"author\": {\n    \"name\": \"The xterm.js authors\",\n    \"url\": "
  },
  {
    "path": "addons/addon-progress/src/ProgressAddon.ts",
    "chars": 2902,
    "preview": "/**\n * Copyright (c) 2024 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { Terminal, ITermi"
  },
  {
    "path": "addons/addon-progress/src/tsconfig.json",
    "chars": 725,
    "preview": "{\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"target\": \"es2021\",\n    \"lib\": [\n      \"dom\",\n      \"es2015\"\n    "
  },
  {
    "path": "addons/addon-progress/test/ProgressAddon.test.ts",
    "chars": 5404,
    "preview": "/**\n * Copyright (c) 2024 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport test from '@playwright/"
  },
  {
    "path": "addons/addon-progress/test/playwright.config.ts",
    "chars": 592,
    "preview": "import { PlaywrightTestConfig } from '@playwright/test';\n\nconst config: PlaywrightTestConfig = {\n  testDir: '.',\n  timeo"
  },
  {
    "path": "addons/addon-progress/test/tsconfig.json",
    "chars": 724,
    "preview": "{\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"target\": \"ESNext\",\n    \"lib\": [\n      \"es2021\",\n    ],\n    \"root"
  },
  {
    "path": "addons/addon-progress/tsconfig.json",
    "chars": 108,
    "preview": "{\n  \"files\": [],\n  \"include\": [],\n  \"references\": [\n    { \"path\": \"./src\" },\n    { \"path\": \"./test\" }\n  ]\n}\n"
  },
  {
    "path": "addons/addon-progress/typings/addon-progress.d.ts",
    "chars": 1887,
    "preview": "/**\n * Copyright (c) 2024 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Terminal, ITerminalAd"
  },
  {
    "path": "addons/addon-progress/webpack.config.js",
    "chars": 944,
    "preview": "/**\n * Copyright (c) 2024 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nconst path = require('path');\n"
  },
  {
    "path": "addons/addon-search/.gitignore",
    "chars": 16,
    "preview": "lib\nnode_modules"
  },
  {
    "path": "addons/addon-search/.npmignore",
    "chars": 433,
    "preview": "# Blacklist - exclude everything except npm defaults such as LICENSE, etc\n*\n!*/\n\n# Whitelist - lib/\n!lib/**/*.d.ts\n\n!lib"
  },
  {
    "path": "addons/addon-search/LICENSE",
    "chars": 1103,
    "preview": "Copyright (c) 2017, The xterm.js authors (https://github.com/xtermjs/xterm.js)\n\nPermission is hereby granted, free of ch"
  },
  {
    "path": "addons/addon-search/README.md",
    "chars": 608,
    "preview": "## @xterm/addon-search\n\nAn addon for [xterm.js](https://github.com/xtermjs/xterm.js) that enables searching the buffer. "
  },
  {
    "path": "addons/addon-search/fixtures/issue-2444",
    "chars": 9183,
    "preview": "/usr/bin/cmake -E cmake_progress_report /home/yan/ssd/searchtrunk/tmp/release/CMakeFiles\nmake[3]: Entering directory `/h"
  },
  {
    "path": "addons/addon-search/package.json",
    "chars": 632,
    "preview": "{\n  \"name\": \"@xterm/addon-search\",\n  \"version\": \"0.16.0\",\n  \"author\": {\n    \"name\": \"The xterm.js authors\",\n    \"url\": \""
  },
  {
    "path": "addons/addon-search/src/DecorationManager.ts",
    "chars": 5932,
    "preview": "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { Terminal, IDispo"
  },
  {
    "path": "addons/addon-search/src/SearchAddon.ts",
    "chars": 9339,
    "preview": "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { Terminal, IDispo"
  },
  {
    "path": "addons/addon-search/src/SearchEngine.test.ts",
    "chars": 22247,
    "preview": "/**\n * Copyright (c) 2024 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { assert } from 'chai';\n"
  },
  {
    "path": "addons/addon-search/src/SearchEngine.ts",
    "chars": 14043,
    "preview": "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { Terminal } from "
  },
  {
    "path": "addons/addon-search/src/SearchLineCache.test.ts",
    "chars": 9792,
    "preview": "/**\n * Copyright (c) 2024 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { assert } from 'chai';\n"
  },
  {
    "path": "addons/addon-search/src/SearchLineCache.ts",
    "chars": 4793,
    "preview": "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { Terminal } from "
  },
  {
    "path": "addons/addon-search/src/SearchResultTracker.ts",
    "chars": 3326,
    "preview": "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ISearchResultCha"
  },
  {
    "path": "addons/addon-search/src/SearchState.ts",
    "chars": 2821,
    "preview": "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ISearchOptions }"
  },
  {
    "path": "addons/addon-search/src/tsconfig.json",
    "chars": 723,
    "preview": "{\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"target\": \"es2021\",\n    \"lib\": [\n      \"dom\",\n      \"es2021\",\n   "
  },
  {
    "path": "addons/addon-search/test/SearchAddon.test.ts",
    "chars": 31725,
    "preview": "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport test from '@playwright/"
  },
  {
    "path": "addons/addon-search/test/playwright.config.ts",
    "chars": 592,
    "preview": "import { PlaywrightTestConfig } from '@playwright/test';\n\nconst config: PlaywrightTestConfig = {\n  testDir: '.',\n  timeo"
  },
  {
    "path": "addons/addon-search/test/tsconfig.json",
    "chars": 724,
    "preview": "{\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"target\": \"ESNext\",\n    \"lib\": [\n      \"es2021\",\n    ],\n    \"root"
  },
  {
    "path": "addons/addon-search/tsconfig.json",
    "chars": 108,
    "preview": "{\n  \"files\": [],\n  \"include\": [],\n  \"references\": [\n    { \"path\": \"./src\" },\n    { \"path\": \"./test\" }\n  ]\n}\n"
  },
  {
    "path": "addons/addon-search/typings/addon-search.d.ts",
    "chars": 4260,
    "preview": "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Terminal, ITerminalAd"
  },
  {
    "path": "addons/addon-search/webpack.config.js",
    "chars": 890,
    "preview": "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nconst path = require('path');\n"
  },
  {
    "path": "addons/addon-serialize/.gitignore",
    "chars": 31,
    "preview": "lib\nnode_modules\nout-benchmark\n"
  },
  {
    "path": "addons/addon-serialize/.npmignore",
    "chars": 433,
    "preview": "# Blacklist - exclude everything except npm defaults such as LICENSE, etc\n*\n!*/\n\n# Whitelist - lib/\n!lib/**/*.d.ts\n\n!lib"
  },
  {
    "path": "addons/addon-serialize/README.md",
    "chars": 1139,
    "preview": "## @xterm/addon-serialize\n\nAn addon for [xterm.js](https://github.com/xtermjs/xterm.js) that enables xterm.js to seriali"
  },
  {
    "path": "addons/addon-serialize/benchmark/SerializeAddon.benchmark.ts",
    "chars": 2117,
    "preview": "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { perfContext, before, "
  },
  {
    "path": "addons/addon-serialize/benchmark/benchmark.json",
    "chars": 427,
    "preview": "{\n  \"APP_PATH\": \".benchmark\",\n  \"evalConfig\": {\n    \"tolerance\": {\n      \"*\": [0.75, 1.5],\n      \"*.dev\": [0.01, 1.5],\n "
  },
  {
    "path": "addons/addon-serialize/benchmark/tsconfig.json",
    "chars": 754,
    "preview": "{\n  \"compilerOptions\": {\n    \"lib\": [\n      \"dom\",\n      \"es2021\"\n    ],\n    \"rootDir\": \"..\",\n    \"outDir\": \"../out-benc"
  },
  {
    "path": "addons/addon-serialize/package.json",
    "chars": 1193,
    "preview": "{\n  \"name\": \"@xterm/addon-serialize\",\n  \"version\": \"0.14.0\",\n  \"author\": {\n    \"name\": \"The xterm.js authors\",\n    \"url\""
  },
  {
    "path": "addons/addon-serialize/src/SerializeAddon.test.ts",
    "chars": 17292,
    "preview": "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport jsdom = require('jsdom'"
  },
  {
    "path": "addons/addon-serialize/src/SerializeAddon.ts",
    "chars": 30290,
    "preview": "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * (EXPERIMENTAL) This Addon is "
  },
  {
    "path": "addons/addon-serialize/src/tsconfig.json",
    "chars": 753,
    "preview": "{\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"target\": \"es2021\",\n    \"lib\": [\n      \"dom\",\n      \"es2015\"\n    "
  },
  {
    "path": "addons/addon-serialize/test/SerializeAddon.test.ts",
    "chars": 25530,
    "preview": "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport test from '@playwright/"
  },
  {
    "path": "addons/addon-serialize/test/playwright.config.ts",
    "chars": 592,
    "preview": "import { PlaywrightTestConfig } from '@playwright/test';\n\nconst config: PlaywrightTestConfig = {\n  testDir: '.',\n  timeo"
  },
  {
    "path": "addons/addon-serialize/test/tsconfig.json",
    "chars": 688,
    "preview": "{\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"target\": \"ESNext\",\n    \"lib\": [\n      \"es2021\",\n    ],\n    \"root"
  },
  {
    "path": "addons/addon-serialize/tsconfig.json",
    "chars": 139,
    "preview": "{\n  \"files\": [],\n  \"include\": [],\n  \"references\": [\n    { \"path\": \"./src\" },\n    { \"path\": \"./test\" },\n    { \"path\": \"./"
  },
  {
    "path": "addons/addon-serialize/typings/addon-serialize.d.ts",
    "chars": 3616,
    "preview": "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Terminal, ITerminalAd"
  },
  {
    "path": "addons/addon-serialize/webpack.config.js",
    "chars": 906,
    "preview": "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nconst path = require('path');\n"
  },
  {
    "path": "addons/addon-unicode-graphemes/.gitignore",
    "chars": 31,
    "preview": "lib\nnode_modules\nout-benchmark\n"
  },
  {
    "path": "addons/addon-unicode-graphemes/.npmignore",
    "chars": 433,
    "preview": "# Blacklist - exclude everything except npm defaults such as LICENSE, etc\n*\n!*/\n\n# Whitelist - lib/\n!lib/**/*.d.ts\n\n!lib"
  },
  {
    "path": "addons/addon-unicode-graphemes/LICENSE",
    "chars": 1103,
    "preview": "Copyright (c) 2023, The xterm.js authors (https://github.com/xtermjs/xterm.js)\n\nPermission is hereby granted, free of ch"
  },
  {
    "path": "addons/addon-unicode-graphemes/README.md",
    "chars": 764,
    "preview": "## @xterm/addon-unicode-graphemes\n\n⚠️ **This addon is currently experimental and may introduce unexpected and non-standa"
  },
  {
    "path": "addons/addon-unicode-graphemes/benchmark/UnicodeGraphemeAddon.benchmark.ts",
    "chars": 2634,
    "preview": "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { perfContext, before, "
  },
  {
    "path": "addons/addon-unicode-graphemes/benchmark/benchmark.json",
    "chars": 426,
    "preview": "{\n  \"APP_PATH\": \".benchmark\",\n  \"evalConfig\": {\n    \"tolerance\": {\n      \"*\": [0.75, 1.5],\n      \"*.dev\": [0.01, 1.5],\n "
  },
  {
    "path": "addons/addon-unicode-graphemes/benchmark/tsconfig.json",
    "chars": 767,
    "preview": "{\n  \"compilerOptions\": {\n    \"lib\": [\"dom\", \"es6\"],\n    \"rootDir\": \"..\",\n    \"outDir\": \"../out-benchmark\",\n    \"types\": "
  },
  {
    "path": "addons/addon-unicode-graphemes/package.json",
    "chars": 1270,
    "preview": "{\n  \"name\": \"@xterm/addon-unicode-graphemes\",\n  \"version\": \"0.4.0\",\n  \"author\": {\n    \"name\": \"The xterm.js authors\",\n  "
  },
  {
    "path": "addons/addon-unicode-graphemes/src/UnicodeGraphemeProvider.ts",
    "chars": 2597,
    "preview": "/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IUnicodeVersionProvid"
  }
]

// ... and 496 more files (download for full content)

About this extraction

This page contains the full source code of the xtermjs/xterm.js GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 696 files (4.5 MB), approximately 1.2M tokens, and a symbol index with 3490 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!