From 5e7cb549ffdf04a37599d6f6dd061b812e6cb39e Mon Sep 17 00:00:00 2001 From: Kyle Carberry Date: Sun, 16 Nov 2025 11:24:18 -0500 Subject: [PATCH] feat: add Seti icons to file tree --- scripts/update_seti_icons.sh | 15 + .../assets/file-icons/seti-icon-theme.json | 2406 +++++++++++++++++ src/browser/assets/file-icons/seti.woff | Bin 0 -> 37284 bytes src/browser/components/FileIcon.tsx | 163 ++ .../RightSidebar/CodeReview/FileTree.tsx | 14 +- src/browser/styles/globals.css | 15 +- 6 files changed, 2607 insertions(+), 6 deletions(-) create mode 100755 scripts/update_seti_icons.sh create mode 100644 src/browser/assets/file-icons/seti-icon-theme.json create mode 100644 src/browser/assets/file-icons/seti.woff create mode 100644 src/browser/components/FileIcon.tsx diff --git a/scripts/update_seti_icons.sh b/scripts/update_seti_icons.sh new file mode 100755 index 000000000..8bf8597e4 --- /dev/null +++ b/scripts/update_seti_icons.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +ASSET_DIR="$ROOT_DIR/src/browser/assets/file-icons" + +mkdir -p "$ASSET_DIR" + +curl -sSL "https://raw.githubusercontent.com/microsoft/vscode/main/extensions/theme-seti/icons/seti.woff" \ + -o "$ASSET_DIR/seti.woff" + +curl -sSL "https://raw.githubusercontent.com/microsoft/vscode/main/extensions/theme-seti/icons/vs-seti-icon-theme.json" \ + -o "$ASSET_DIR/seti-icon-theme.json" + +echo "Updated Seti icon assets in $ASSET_DIR" diff --git a/src/browser/assets/file-icons/seti-icon-theme.json b/src/browser/assets/file-icons/seti-icon-theme.json new file mode 100644 index 000000000..16538ff3b --- /dev/null +++ b/src/browser/assets/file-icons/seti-icon-theme.json @@ -0,0 +1,2406 @@ +{ + "information_for_contributors": [ + "This file has been generated from data in https://github.com/jesseweed/seti-ui", + "- icon definitions: https://github.com/jesseweed/seti-ui/blob/master/styles/_fonts/seti.less", + "- icon colors: https://github.com/jesseweed/seti-ui/blob/master/styles/ui-variables.less", + "- file associations: https://github.com/jesseweed/seti-ui/blob/master/styles/components/icons/mapping.less", + "If you want to provide a fix or improvement, please create a pull request against the jesseweed/seti-ui repository.", + "Once accepted there, we are happy to receive an update request." + ], + "fonts": [ + { + "id": "seti", + "src": [ + { + "path": "./seti.woff", + "format": "woff" + } + ], + "weight": "normal", + "style": "normal", + "size": "150%" + } + ], + "iconDefinitions": { + "_R_light": { + "fontCharacter": "\\E001", + "fontColor": "#498ba7" + }, + "_R": { + "fontCharacter": "\\E001", + "fontColor": "#519aba" + }, + "_argdown_light": { + "fontCharacter": "\\E003", + "fontColor": "#498ba7" + }, + "_argdown": { + "fontCharacter": "\\E003", + "fontColor": "#519aba" + }, + "_asm_light": { + "fontCharacter": "\\E004", + "fontColor": "#b8383d" + }, + "_asm": { + "fontCharacter": "\\E004", + "fontColor": "#cc3e44" + }, + "_audio_light": { + "fontCharacter": "\\E005", + "fontColor": "#9068b0" + }, + "_audio": { + "fontCharacter": "\\E005", + "fontColor": "#a074c4" + }, + "_babel_light": { + "fontCharacter": "\\E006", + "fontColor": "#b7b73b" + }, + "_babel": { + "fontCharacter": "\\E006", + "fontColor": "#cbcb41" + }, + "_bazel_light": { + "fontCharacter": "\\E007", + "fontColor": "#7fae42" + }, + "_bazel": { + "fontCharacter": "\\E007", + "fontColor": "#8dc149" + }, + "_bazel_1_light": { + "fontCharacter": "\\E007", + "fontColor": "#455155" + }, + "_bazel_1": { + "fontCharacter": "\\E007", + "fontColor": "#4d5a5e" + }, + "_bicep_light": { + "fontCharacter": "\\E008", + "fontColor": "#498ba7" + }, + "_bicep": { + "fontCharacter": "\\E008", + "fontColor": "#519aba" + }, + "_bower_light": { + "fontCharacter": "\\E009", + "fontColor": "#cc6d2e" + }, + "_bower": { + "fontCharacter": "\\E009", + "fontColor": "#e37933" + }, + "_bsl_light": { + "fontCharacter": "\\E00A", + "fontColor": "#b8383d" + }, + "_bsl": { + "fontCharacter": "\\E00A", + "fontColor": "#cc3e44" + }, + "_c_light": { + "fontCharacter": "\\E00C", + "fontColor": "#498ba7" + }, + "_c": { + "fontCharacter": "\\E00C", + "fontColor": "#519aba" + }, + "_c-sharp_light": { + "fontCharacter": "\\E00B", + "fontColor": "#498ba7" + }, + "_c-sharp": { + "fontCharacter": "\\E00B", + "fontColor": "#519aba" + }, + "_c_1_light": { + "fontCharacter": "\\E00C", + "fontColor": "#9068b0" + }, + "_c_1": { + "fontCharacter": "\\E00C", + "fontColor": "#a074c4" + }, + "_c_2_light": { + "fontCharacter": "\\E00C", + "fontColor": "#b7b73b" + }, + "_c_2": { + "fontCharacter": "\\E00C", + "fontColor": "#cbcb41" + }, + "_cake_light": { + "fontCharacter": "\\E00D", + "fontColor": "#b8383d" + }, + "_cake": { + "fontCharacter": "\\E00D", + "fontColor": "#cc3e44" + }, + "_cake_php_light": { + "fontCharacter": "\\E00E", + "fontColor": "#b8383d" + }, + "_cake_php": { + "fontCharacter": "\\E00E", + "fontColor": "#cc3e44" + }, + "_clock_light": { + "fontCharacter": "\\E012", + "fontColor": "#498ba7" + }, + "_clock": { + "fontCharacter": "\\E012", + "fontColor": "#519aba" + }, + "_clock_1_light": { + "fontCharacter": "\\E012", + "fontColor": "#627379" + }, + "_clock_1": { + "fontCharacter": "\\E012", + "fontColor": "#6d8086" + }, + "_clojure_light": { + "fontCharacter": "\\E013", + "fontColor": "#7fae42" + }, + "_clojure": { + "fontCharacter": "\\E013", + "fontColor": "#8dc149" + }, + "_clojure_1_light": { + "fontCharacter": "\\E013", + "fontColor": "#498ba7" + }, + "_clojure_1": { + "fontCharacter": "\\E013", + "fontColor": "#519aba" + }, + "_code-climate_light": { + "fontCharacter": "\\E014", + "fontColor": "#7fae42" + }, + "_code-climate": { + "fontCharacter": "\\E014", + "fontColor": "#8dc149" + }, + "_code-search_light": { + "fontCharacter": "\\E015", + "fontColor": "#9068b0" + }, + "_code-search": { + "fontCharacter": "\\E015", + "fontColor": "#a074c4" + }, + "_coffee_light": { + "fontCharacter": "\\E016", + "fontColor": "#b7b73b" + }, + "_coffee": { + "fontCharacter": "\\E016", + "fontColor": "#cbcb41" + }, + "_coldfusion_light": { + "fontCharacter": "\\E018", + "fontColor": "#498ba7" + }, + "_coldfusion": { + "fontCharacter": "\\E018", + "fontColor": "#519aba" + }, + "_config_light": { + "fontCharacter": "\\E019", + "fontColor": "#627379" + }, + "_config": { + "fontCharacter": "\\E019", + "fontColor": "#6d8086" + }, + "_cpp_light": { + "fontCharacter": "\\E01A", + "fontColor": "#498ba7" + }, + "_cpp": { + "fontCharacter": "\\E01A", + "fontColor": "#519aba" + }, + "_cpp_1_light": { + "fontCharacter": "\\E01A", + "fontColor": "#9068b0" + }, + "_cpp_1": { + "fontCharacter": "\\E01A", + "fontColor": "#a074c4" + }, + "_cpp_2_light": { + "fontCharacter": "\\E01A", + "fontColor": "#b7b73b" + }, + "_cpp_2": { + "fontCharacter": "\\E01A", + "fontColor": "#cbcb41" + }, + "_crystal_light": { + "fontCharacter": "\\E01B", + "fontColor": "#bfc2c1" + }, + "_crystal": { + "fontCharacter": "\\E01B", + "fontColor": "#d4d7d6" + }, + "_crystal_embedded_light": { + "fontCharacter": "\\E01C", + "fontColor": "#bfc2c1" + }, + "_crystal_embedded": { + "fontCharacter": "\\E01C", + "fontColor": "#d4d7d6" + }, + "_css_light": { + "fontCharacter": "\\E01D", + "fontColor": "#498ba7" + }, + "_css": { + "fontCharacter": "\\E01D", + "fontColor": "#519aba" + }, + "_csv_light": { + "fontCharacter": "\\E01E", + "fontColor": "#7fae42" + }, + "_csv": { + "fontCharacter": "\\E01E", + "fontColor": "#8dc149" + }, + "_cu_light": { + "fontCharacter": "\\E01F", + "fontColor": "#7fae42" + }, + "_cu": { + "fontCharacter": "\\E01F", + "fontColor": "#8dc149" + }, + "_cu_1_light": { + "fontCharacter": "\\E01F", + "fontColor": "#9068b0" + }, + "_cu_1": { + "fontCharacter": "\\E01F", + "fontColor": "#a074c4" + }, + "_d_light": { + "fontCharacter": "\\E020", + "fontColor": "#b8383d" + }, + "_d": { + "fontCharacter": "\\E020", + "fontColor": "#cc3e44" + }, + "_dart_light": { + "fontCharacter": "\\E021", + "fontColor": "#498ba7" + }, + "_dart": { + "fontCharacter": "\\E021", + "fontColor": "#519aba" + }, + "_db_light": { + "fontCharacter": "\\E022", + "fontColor": "#dd4b78" + }, + "_db": { + "fontCharacter": "\\E022", + "fontColor": "#f55385" + }, + "_db_1_light": { + "fontCharacter": "\\E022", + "fontColor": "#498ba7" + }, + "_db_1": { + "fontCharacter": "\\E022", + "fontColor": "#519aba" + }, + "_default_light": { + "fontCharacter": "\\E023", + "fontColor": "#bfc2c1" + }, + "_default": { + "fontCharacter": "\\E023", + "fontColor": "#d4d7d6" + }, + "_docker_light": { + "fontCharacter": "\\E025", + "fontColor": "#498ba7" + }, + "_docker": { + "fontCharacter": "\\E025", + "fontColor": "#519aba" + }, + "_docker_1_light": { + "fontCharacter": "\\E025", + "fontColor": "#455155" + }, + "_docker_1": { + "fontCharacter": "\\E025", + "fontColor": "#4d5a5e" + }, + "_docker_2_light": { + "fontCharacter": "\\E025", + "fontColor": "#7fae42" + }, + "_docker_2": { + "fontCharacter": "\\E025", + "fontColor": "#8dc149" + }, + "_docker_3_light": { + "fontCharacter": "\\E025", + "fontColor": "#dd4b78" + }, + "_docker_3": { + "fontCharacter": "\\E025", + "fontColor": "#f55385" + }, + "_ejs_light": { + "fontCharacter": "\\E027", + "fontColor": "#b7b73b" + }, + "_ejs": { + "fontCharacter": "\\E027", + "fontColor": "#cbcb41" + }, + "_elixir_light": { + "fontCharacter": "\\E028", + "fontColor": "#9068b0" + }, + "_elixir": { + "fontCharacter": "\\E028", + "fontColor": "#a074c4" + }, + "_elixir_script_light": { + "fontCharacter": "\\E029", + "fontColor": "#9068b0" + }, + "_elixir_script": { + "fontCharacter": "\\E029", + "fontColor": "#a074c4" + }, + "_elm_light": { + "fontCharacter": "\\E02A", + "fontColor": "#498ba7" + }, + "_elm": { + "fontCharacter": "\\E02A", + "fontColor": "#519aba" + }, + "_eslint_light": { + "fontCharacter": "\\E02C", + "fontColor": "#9068b0" + }, + "_eslint": { + "fontCharacter": "\\E02C", + "fontColor": "#a074c4" + }, + "_eslint_1_light": { + "fontCharacter": "\\E02C", + "fontColor": "#455155" + }, + "_eslint_1": { + "fontCharacter": "\\E02C", + "fontColor": "#4d5a5e" + }, + "_ethereum_light": { + "fontCharacter": "\\E02D", + "fontColor": "#498ba7" + }, + "_ethereum": { + "fontCharacter": "\\E02D", + "fontColor": "#519aba" + }, + "_f-sharp_light": { + "fontCharacter": "\\E02E", + "fontColor": "#498ba7" + }, + "_f-sharp": { + "fontCharacter": "\\E02E", + "fontColor": "#519aba" + }, + "_favicon_light": { + "fontCharacter": "\\E02F", + "fontColor": "#b7b73b" + }, + "_favicon": { + "fontCharacter": "\\E02F", + "fontColor": "#cbcb41" + }, + "_firebase_light": { + "fontCharacter": "\\E030", + "fontColor": "#cc6d2e" + }, + "_firebase": { + "fontCharacter": "\\E030", + "fontColor": "#e37933" + }, + "_firefox_light": { + "fontCharacter": "\\E031", + "fontColor": "#cc6d2e" + }, + "_firefox": { + "fontCharacter": "\\E031", + "fontColor": "#e37933" + }, + "_font_light": { + "fontCharacter": "\\E033", + "fontColor": "#b8383d" + }, + "_font": { + "fontCharacter": "\\E033", + "fontColor": "#cc3e44" + }, + "_git_light": { + "fontCharacter": "\\E034", + "fontColor": "#3b4b52" + }, + "_git": { + "fontCharacter": "\\E034", + "fontColor": "#41535b" + }, + "_github_light": { + "fontCharacter": "\\E037", + "fontColor": "#bfc2c1" + }, + "_github": { + "fontCharacter": "\\E037", + "fontColor": "#d4d7d6" + }, + "_gitlab_light": { + "fontCharacter": "\\E038", + "fontColor": "#cc6d2e" + }, + "_gitlab": { + "fontCharacter": "\\E038", + "fontColor": "#e37933" + }, + "_go_light": { + "fontCharacter": "\\E039", + "fontColor": "#498ba7" + }, + "_go": { + "fontCharacter": "\\E039", + "fontColor": "#519aba" + }, + "_go2_light": { + "fontCharacter": "\\E03A", + "fontColor": "#498ba7" + }, + "_go2": { + "fontCharacter": "\\E03A", + "fontColor": "#519aba" + }, + "_godot_light": { + "fontCharacter": "\\E03B", + "fontColor": "#498ba7" + }, + "_godot": { + "fontCharacter": "\\E03B", + "fontColor": "#519aba" + }, + "_godot_1_light": { + "fontCharacter": "\\E03B", + "fontColor": "#b8383d" + }, + "_godot_1": { + "fontCharacter": "\\E03B", + "fontColor": "#cc3e44" + }, + "_godot_2_light": { + "fontCharacter": "\\E03B", + "fontColor": "#b7b73b" + }, + "_godot_2": { + "fontCharacter": "\\E03B", + "fontColor": "#cbcb41" + }, + "_godot_3_light": { + "fontCharacter": "\\E03B", + "fontColor": "#9068b0" + }, + "_godot_3": { + "fontCharacter": "\\E03B", + "fontColor": "#a074c4" + }, + "_gradle_light": { + "fontCharacter": "\\E03C", + "fontColor": "#498ba7" + }, + "_gradle": { + "fontCharacter": "\\E03C", + "fontColor": "#519aba" + }, + "_grails_light": { + "fontCharacter": "\\E03D", + "fontColor": "#7fae42" + }, + "_grails": { + "fontCharacter": "\\E03D", + "fontColor": "#8dc149" + }, + "_graphql_light": { + "fontCharacter": "\\E03E", + "fontColor": "#dd4b78" + }, + "_graphql": { + "fontCharacter": "\\E03E", + "fontColor": "#f55385" + }, + "_grunt_light": { + "fontCharacter": "\\E03F", + "fontColor": "#cc6d2e" + }, + "_grunt": { + "fontCharacter": "\\E03F", + "fontColor": "#e37933" + }, + "_gulp_light": { + "fontCharacter": "\\E040", + "fontColor": "#b8383d" + }, + "_gulp": { + "fontCharacter": "\\E040", + "fontColor": "#cc3e44" + }, + "_hacklang_light": { + "fontCharacter": "\\E041", + "fontColor": "#cc6d2e" + }, + "_hacklang": { + "fontCharacter": "\\E041", + "fontColor": "#e37933" + }, + "_haml_light": { + "fontCharacter": "\\E042", + "fontColor": "#b8383d" + }, + "_haml": { + "fontCharacter": "\\E042", + "fontColor": "#cc3e44" + }, + "_happenings_light": { + "fontCharacter": "\\E043", + "fontColor": "#498ba7" + }, + "_happenings": { + "fontCharacter": "\\E043", + "fontColor": "#519aba" + }, + "_haskell_light": { + "fontCharacter": "\\E044", + "fontColor": "#9068b0" + }, + "_haskell": { + "fontCharacter": "\\E044", + "fontColor": "#a074c4" + }, + "_haxe_light": { + "fontCharacter": "\\E045", + "fontColor": "#cc6d2e" + }, + "_haxe": { + "fontCharacter": "\\E045", + "fontColor": "#e37933" + }, + "_haxe_1_light": { + "fontCharacter": "\\E045", + "fontColor": "#b7b73b" + }, + "_haxe_1": { + "fontCharacter": "\\E045", + "fontColor": "#cbcb41" + }, + "_haxe_2_light": { + "fontCharacter": "\\E045", + "fontColor": "#498ba7" + }, + "_haxe_2": { + "fontCharacter": "\\E045", + "fontColor": "#519aba" + }, + "_haxe_3_light": { + "fontCharacter": "\\E045", + "fontColor": "#9068b0" + }, + "_haxe_3": { + "fontCharacter": "\\E045", + "fontColor": "#a074c4" + }, + "_heroku_light": { + "fontCharacter": "\\E046", + "fontColor": "#9068b0" + }, + "_heroku": { + "fontCharacter": "\\E046", + "fontColor": "#a074c4" + }, + "_hex_light": { + "fontCharacter": "\\E047", + "fontColor": "#b8383d" + }, + "_hex": { + "fontCharacter": "\\E047", + "fontColor": "#cc3e44" + }, + "_html_light": { + "fontCharacter": "\\E048", + "fontColor": "#498ba7" + }, + "_html": { + "fontCharacter": "\\E048", + "fontColor": "#519aba" + }, + "_html_1_light": { + "fontCharacter": "\\E048", + "fontColor": "#7fae42" + }, + "_html_1": { + "fontCharacter": "\\E048", + "fontColor": "#8dc149" + }, + "_html_2_light": { + "fontCharacter": "\\E048", + "fontColor": "#b7b73b" + }, + "_html_2": { + "fontCharacter": "\\E048", + "fontColor": "#cbcb41" + }, + "_html_3_light": { + "fontCharacter": "\\E048", + "fontColor": "#cc6d2e" + }, + "_html_3": { + "fontCharacter": "\\E048", + "fontColor": "#e37933" + }, + "_html_erb_light": { + "fontCharacter": "\\E049", + "fontColor": "#b8383d" + }, + "_html_erb": { + "fontCharacter": "\\E049", + "fontColor": "#cc3e44" + }, + "_ignored_light": { + "fontCharacter": "\\E04A", + "fontColor": "#3b4b52" + }, + "_ignored": { + "fontCharacter": "\\E04A", + "fontColor": "#41535b" + }, + "_illustrator_light": { + "fontCharacter": "\\E04B", + "fontColor": "#b7b73b" + }, + "_illustrator": { + "fontCharacter": "\\E04B", + "fontColor": "#cbcb41" + }, + "_image_light": { + "fontCharacter": "\\E04C", + "fontColor": "#9068b0" + }, + "_image": { + "fontCharacter": "\\E04C", + "fontColor": "#a074c4" + }, + "_info_light": { + "fontCharacter": "\\E04D", + "fontColor": "#498ba7" + }, + "_info": { + "fontCharacter": "\\E04D", + "fontColor": "#519aba" + }, + "_ionic_light": { + "fontCharacter": "\\E04E", + "fontColor": "#498ba7" + }, + "_ionic": { + "fontCharacter": "\\E04E", + "fontColor": "#519aba" + }, + "_jade_light": { + "fontCharacter": "\\E04F", + "fontColor": "#b8383d" + }, + "_jade": { + "fontCharacter": "\\E04F", + "fontColor": "#cc3e44" + }, + "_java_light": { + "fontCharacter": "\\E050", + "fontColor": "#b8383d" + }, + "_java": { + "fontCharacter": "\\E050", + "fontColor": "#cc3e44" + }, + "_java_1_light": { + "fontCharacter": "\\E050", + "fontColor": "#498ba7" + }, + "_java_1": { + "fontCharacter": "\\E050", + "fontColor": "#519aba" + }, + "_javascript_light": { + "fontCharacter": "\\E051", + "fontColor": "#b7b73b" + }, + "_javascript": { + "fontCharacter": "\\E051", + "fontColor": "#cbcb41" + }, + "_javascript_1_light": { + "fontCharacter": "\\E051", + "fontColor": "#cc6d2e" + }, + "_javascript_1": { + "fontCharacter": "\\E051", + "fontColor": "#e37933" + }, + "_javascript_2_light": { + "fontCharacter": "\\E051", + "fontColor": "#498ba7" + }, + "_javascript_2": { + "fontCharacter": "\\E051", + "fontColor": "#519aba" + }, + "_jenkins_light": { + "fontCharacter": "\\E052", + "fontColor": "#b8383d" + }, + "_jenkins": { + "fontCharacter": "\\E052", + "fontColor": "#cc3e44" + }, + "_jinja_light": { + "fontCharacter": "\\E053", + "fontColor": "#b8383d" + }, + "_jinja": { + "fontCharacter": "\\E053", + "fontColor": "#cc3e44" + }, + "_json_light": { + "fontCharacter": "\\E055", + "fontColor": "#b7b73b" + }, + "_json": { + "fontCharacter": "\\E055", + "fontColor": "#cbcb41" + }, + "_json_1_light": { + "fontCharacter": "\\E055", + "fontColor": "#7fae42" + }, + "_json_1": { + "fontCharacter": "\\E055", + "fontColor": "#8dc149" + }, + "_julia_light": { + "fontCharacter": "\\E056", + "fontColor": "#9068b0" + }, + "_julia": { + "fontCharacter": "\\E056", + "fontColor": "#a074c4" + }, + "_karma_light": { + "fontCharacter": "\\E057", + "fontColor": "#7fae42" + }, + "_karma": { + "fontCharacter": "\\E057", + "fontColor": "#8dc149" + }, + "_kotlin_light": { + "fontCharacter": "\\E058", + "fontColor": "#cc6d2e" + }, + "_kotlin": { + "fontCharacter": "\\E058", + "fontColor": "#e37933" + }, + "_less_light": { + "fontCharacter": "\\E059", + "fontColor": "#498ba7" + }, + "_less": { + "fontCharacter": "\\E059", + "fontColor": "#519aba" + }, + "_license_light": { + "fontCharacter": "\\E05A", + "fontColor": "#b7b73b" + }, + "_license": { + "fontCharacter": "\\E05A", + "fontColor": "#cbcb41" + }, + "_license_1_light": { + "fontCharacter": "\\E05A", + "fontColor": "#cc6d2e" + }, + "_license_1": { + "fontCharacter": "\\E05A", + "fontColor": "#e37933" + }, + "_license_2_light": { + "fontCharacter": "\\E05A", + "fontColor": "#b8383d" + }, + "_license_2": { + "fontCharacter": "\\E05A", + "fontColor": "#cc3e44" + }, + "_liquid_light": { + "fontCharacter": "\\E05B", + "fontColor": "#7fae42" + }, + "_liquid": { + "fontCharacter": "\\E05B", + "fontColor": "#8dc149" + }, + "_livescript_light": { + "fontCharacter": "\\E05C", + "fontColor": "#498ba7" + }, + "_livescript": { + "fontCharacter": "\\E05C", + "fontColor": "#519aba" + }, + "_lock_light": { + "fontCharacter": "\\E05D", + "fontColor": "#7fae42" + }, + "_lock": { + "fontCharacter": "\\E05D", + "fontColor": "#8dc149" + }, + "_lua_light": { + "fontCharacter": "\\E05E", + "fontColor": "#498ba7" + }, + "_lua": { + "fontCharacter": "\\E05E", + "fontColor": "#519aba" + }, + "_makefile_light": { + "fontCharacter": "\\E05F", + "fontColor": "#cc6d2e" + }, + "_makefile": { + "fontCharacter": "\\E05F", + "fontColor": "#e37933" + }, + "_makefile_1_light": { + "fontCharacter": "\\E05F", + "fontColor": "#9068b0" + }, + "_makefile_1": { + "fontCharacter": "\\E05F", + "fontColor": "#a074c4" + }, + "_makefile_2_light": { + "fontCharacter": "\\E05F", + "fontColor": "#627379" + }, + "_makefile_2": { + "fontCharacter": "\\E05F", + "fontColor": "#6d8086" + }, + "_makefile_3_light": { + "fontCharacter": "\\E05F", + "fontColor": "#498ba7" + }, + "_makefile_3": { + "fontCharacter": "\\E05F", + "fontColor": "#519aba" + }, + "_markdown_light": { + "fontCharacter": "\\E060", + "fontColor": "#498ba7" + }, + "_markdown": { + "fontCharacter": "\\E060", + "fontColor": "#519aba" + }, + "_maven_light": { + "fontCharacter": "\\E061", + "fontColor": "#b8383d" + }, + "_maven": { + "fontCharacter": "\\E061", + "fontColor": "#cc3e44" + }, + "_mdo_light": { + "fontCharacter": "\\E062", + "fontColor": "#b8383d" + }, + "_mdo": { + "fontCharacter": "\\E062", + "fontColor": "#cc3e44" + }, + "_mustache_light": { + "fontCharacter": "\\E063", + "fontColor": "#cc6d2e" + }, + "_mustache": { + "fontCharacter": "\\E063", + "fontColor": "#e37933" + }, + "_nim_light": { + "fontCharacter": "\\E065", + "fontColor": "#b7b73b" + }, + "_nim": { + "fontCharacter": "\\E065", + "fontColor": "#cbcb41" + }, + "_notebook_light": { + "fontCharacter": "\\E066", + "fontColor": "#498ba7" + }, + "_notebook": { + "fontCharacter": "\\E066", + "fontColor": "#519aba" + }, + "_npm_light": { + "fontCharacter": "\\E067", + "fontColor": "#3b4b52" + }, + "_npm": { + "fontCharacter": "\\E067", + "fontColor": "#41535b" + }, + "_npm_1_light": { + "fontCharacter": "\\E067", + "fontColor": "#b8383d" + }, + "_npm_1": { + "fontCharacter": "\\E067", + "fontColor": "#cc3e44" + }, + "_npm_ignored_light": { + "fontCharacter": "\\E068", + "fontColor": "#3b4b52" + }, + "_npm_ignored": { + "fontCharacter": "\\E068", + "fontColor": "#41535b" + }, + "_nunjucks_light": { + "fontCharacter": "\\E069", + "fontColor": "#7fae42" + }, + "_nunjucks": { + "fontCharacter": "\\E069", + "fontColor": "#8dc149" + }, + "_ocaml_light": { + "fontCharacter": "\\E06A", + "fontColor": "#cc6d2e" + }, + "_ocaml": { + "fontCharacter": "\\E06A", + "fontColor": "#e37933" + }, + "_odata_light": { + "fontCharacter": "\\E06B", + "fontColor": "#cc6d2e" + }, + "_odata": { + "fontCharacter": "\\E06B", + "fontColor": "#e37933" + }, + "_pddl_light": { + "fontCharacter": "\\E06C", + "fontColor": "#9068b0" + }, + "_pddl": { + "fontCharacter": "\\E06C", + "fontColor": "#a074c4" + }, + "_pdf_light": { + "fontCharacter": "\\E06D", + "fontColor": "#b8383d" + }, + "_pdf": { + "fontCharacter": "\\E06D", + "fontColor": "#cc3e44" + }, + "_perl_light": { + "fontCharacter": "\\E06E", + "fontColor": "#498ba7" + }, + "_perl": { + "fontCharacter": "\\E06E", + "fontColor": "#519aba" + }, + "_photoshop_light": { + "fontCharacter": "\\E06F", + "fontColor": "#498ba7" + }, + "_photoshop": { + "fontCharacter": "\\E06F", + "fontColor": "#519aba" + }, + "_php_light": { + "fontCharacter": "\\E070", + "fontColor": "#9068b0" + }, + "_php": { + "fontCharacter": "\\E070", + "fontColor": "#a074c4" + }, + "_pipeline_light": { + "fontCharacter": "\\E071", + "fontColor": "#cc6d2e" + }, + "_pipeline": { + "fontCharacter": "\\E071", + "fontColor": "#e37933" + }, + "_plan_light": { + "fontCharacter": "\\E072", + "fontColor": "#7fae42" + }, + "_plan": { + "fontCharacter": "\\E072", + "fontColor": "#8dc149" + }, + "_platformio_light": { + "fontCharacter": "\\E073", + "fontColor": "#cc6d2e" + }, + "_platformio": { + "fontCharacter": "\\E073", + "fontColor": "#e37933" + }, + "_powershell_light": { + "fontCharacter": "\\E074", + "fontColor": "#498ba7" + }, + "_powershell": { + "fontCharacter": "\\E074", + "fontColor": "#519aba" + }, + "_prisma_light": { + "fontCharacter": "\\E075", + "fontColor": "#498ba7" + }, + "_prisma": { + "fontCharacter": "\\E075", + "fontColor": "#519aba" + }, + "_prolog_light": { + "fontCharacter": "\\E077", + "fontColor": "#cc6d2e" + }, + "_prolog": { + "fontCharacter": "\\E077", + "fontColor": "#e37933" + }, + "_pug_light": { + "fontCharacter": "\\E078", + "fontColor": "#b8383d" + }, + "_pug": { + "fontCharacter": "\\E078", + "fontColor": "#cc3e44" + }, + "_puppet_light": { + "fontCharacter": "\\E079", + "fontColor": "#b7b73b" + }, + "_puppet": { + "fontCharacter": "\\E079", + "fontColor": "#cbcb41" + }, + "_purescript_light": { + "fontCharacter": "\\E07A", + "fontColor": "#bfc2c1" + }, + "_purescript": { + "fontCharacter": "\\E07A", + "fontColor": "#d4d7d6" + }, + "_python_light": { + "fontCharacter": "\\E07B", + "fontColor": "#498ba7" + }, + "_python": { + "fontCharacter": "\\E07B", + "fontColor": "#519aba" + }, + "_react_light": { + "fontCharacter": "\\E07D", + "fontColor": "#498ba7" + }, + "_react": { + "fontCharacter": "\\E07D", + "fontColor": "#519aba" + }, + "_react_1_light": { + "fontCharacter": "\\E07D", + "fontColor": "#cc6d2e" + }, + "_react_1": { + "fontCharacter": "\\E07D", + "fontColor": "#e37933" + }, + "_reasonml_light": { + "fontCharacter": "\\E07E", + "fontColor": "#b8383d" + }, + "_reasonml": { + "fontCharacter": "\\E07E", + "fontColor": "#cc3e44" + }, + "_rescript_light": { + "fontCharacter": "\\E07F", + "fontColor": "#b8383d" + }, + "_rescript": { + "fontCharacter": "\\E07F", + "fontColor": "#cc3e44" + }, + "_rescript_1_light": { + "fontCharacter": "\\E07F", + "fontColor": "#dd4b78" + }, + "_rescript_1": { + "fontCharacter": "\\E07F", + "fontColor": "#f55385" + }, + "_rollup_light": { + "fontCharacter": "\\E080", + "fontColor": "#b8383d" + }, + "_rollup": { + "fontCharacter": "\\E080", + "fontColor": "#cc3e44" + }, + "_ruby_light": { + "fontCharacter": "\\E081", + "fontColor": "#b8383d" + }, + "_ruby": { + "fontCharacter": "\\E081", + "fontColor": "#cc3e44" + }, + "_rust_light": { + "fontCharacter": "\\E082", + "fontColor": "#627379" + }, + "_rust": { + "fontCharacter": "\\E082", + "fontColor": "#6d8086" + }, + "_salesforce_light": { + "fontCharacter": "\\E083", + "fontColor": "#498ba7" + }, + "_salesforce": { + "fontCharacter": "\\E083", + "fontColor": "#519aba" + }, + "_sass_light": { + "fontCharacter": "\\E084", + "fontColor": "#dd4b78" + }, + "_sass": { + "fontCharacter": "\\E084", + "fontColor": "#f55385" + }, + "_sbt_light": { + "fontCharacter": "\\E085", + "fontColor": "#498ba7" + }, + "_sbt": { + "fontCharacter": "\\E085", + "fontColor": "#519aba" + }, + "_scala_light": { + "fontCharacter": "\\E086", + "fontColor": "#b8383d" + }, + "_scala": { + "fontCharacter": "\\E086", + "fontColor": "#cc3e44" + }, + "_shell_light": { + "fontCharacter": "\\E089", + "fontColor": "#7fae42" + }, + "_shell": { + "fontCharacter": "\\E089", + "fontColor": "#8dc149" + }, + "_slim_light": { + "fontCharacter": "\\E08A", + "fontColor": "#cc6d2e" + }, + "_slim": { + "fontCharacter": "\\E08A", + "fontColor": "#e37933" + }, + "_smarty_light": { + "fontCharacter": "\\E08B", + "fontColor": "#b7b73b" + }, + "_smarty": { + "fontCharacter": "\\E08B", + "fontColor": "#cbcb41" + }, + "_spring_light": { + "fontCharacter": "\\E08C", + "fontColor": "#7fae42" + }, + "_spring": { + "fontCharacter": "\\E08C", + "fontColor": "#8dc149" + }, + "_stylelint_light": { + "fontCharacter": "\\E08D", + "fontColor": "#bfc2c1" + }, + "_stylelint": { + "fontCharacter": "\\E08D", + "fontColor": "#d4d7d6" + }, + "_stylelint_1_light": { + "fontCharacter": "\\E08D", + "fontColor": "#455155" + }, + "_stylelint_1": { + "fontCharacter": "\\E08D", + "fontColor": "#4d5a5e" + }, + "_stylus_light": { + "fontCharacter": "\\E08E", + "fontColor": "#7fae42" + }, + "_stylus": { + "fontCharacter": "\\E08E", + "fontColor": "#8dc149" + }, + "_sublime_light": { + "fontCharacter": "\\E08F", + "fontColor": "#cc6d2e" + }, + "_sublime": { + "fontCharacter": "\\E08F", + "fontColor": "#e37933" + }, + "_svelte_light": { + "fontCharacter": "\\E090", + "fontColor": "#b8383d" + }, + "_svelte": { + "fontCharacter": "\\E090", + "fontColor": "#cc3e44" + }, + "_svg_light": { + "fontCharacter": "\\E091", + "fontColor": "#9068b0" + }, + "_svg": { + "fontCharacter": "\\E091", + "fontColor": "#a074c4" + }, + "_svg_1_light": { + "fontCharacter": "\\E091", + "fontColor": "#498ba7" + }, + "_svg_1": { + "fontCharacter": "\\E091", + "fontColor": "#519aba" + }, + "_swift_light": { + "fontCharacter": "\\E092", + "fontColor": "#cc6d2e" + }, + "_swift": { + "fontCharacter": "\\E092", + "fontColor": "#e37933" + }, + "_terraform_light": { + "fontCharacter": "\\E093", + "fontColor": "#9068b0" + }, + "_terraform": { + "fontCharacter": "\\E093", + "fontColor": "#a074c4" + }, + "_tex_light": { + "fontCharacter": "\\E094", + "fontColor": "#498ba7" + }, + "_tex": { + "fontCharacter": "\\E094", + "fontColor": "#519aba" + }, + "_tex_1_light": { + "fontCharacter": "\\E094", + "fontColor": "#b7b73b" + }, + "_tex_1": { + "fontCharacter": "\\E094", + "fontColor": "#cbcb41" + }, + "_tex_2_light": { + "fontCharacter": "\\E094", + "fontColor": "#cc6d2e" + }, + "_tex_2": { + "fontCharacter": "\\E094", + "fontColor": "#e37933" + }, + "_tex_3_light": { + "fontCharacter": "\\E094", + "fontColor": "#bfc2c1" + }, + "_tex_3": { + "fontCharacter": "\\E094", + "fontColor": "#d4d7d6" + }, + "_todo": { + "fontCharacter": "\\E096" + }, + "_tsconfig_light": { + "fontCharacter": "\\E097", + "fontColor": "#498ba7" + }, + "_tsconfig": { + "fontCharacter": "\\E097", + "fontColor": "#519aba" + }, + "_twig_light": { + "fontCharacter": "\\E098", + "fontColor": "#7fae42" + }, + "_twig": { + "fontCharacter": "\\E098", + "fontColor": "#8dc149" + }, + "_typescript_light": { + "fontCharacter": "\\E099", + "fontColor": "#498ba7" + }, + "_typescript": { + "fontCharacter": "\\E099", + "fontColor": "#519aba" + }, + "_typescript_1_light": { + "fontCharacter": "\\E099", + "fontColor": "#cc6d2e" + }, + "_typescript_1": { + "fontCharacter": "\\E099", + "fontColor": "#e37933" + }, + "_vala_light": { + "fontCharacter": "\\E09A", + "fontColor": "#627379" + }, + "_vala": { + "fontCharacter": "\\E09A", + "fontColor": "#6d8086" + }, + "_video_light": { + "fontCharacter": "\\E09B", + "fontColor": "#dd4b78" + }, + "_video": { + "fontCharacter": "\\E09B", + "fontColor": "#f55385" + }, + "_vite_light": { + "fontCharacter": "\\E09C", + "fontColor": "#b7b73b" + }, + "_vite": { + "fontCharacter": "\\E09C", + "fontColor": "#cbcb41" + }, + "_vue_light": { + "fontCharacter": "\\E09D", + "fontColor": "#7fae42" + }, + "_vue": { + "fontCharacter": "\\E09D", + "fontColor": "#8dc149" + }, + "_wasm_light": { + "fontCharacter": "\\E09E", + "fontColor": "#9068b0" + }, + "_wasm": { + "fontCharacter": "\\E09E", + "fontColor": "#a074c4" + }, + "_wat_light": { + "fontCharacter": "\\E09F", + "fontColor": "#9068b0" + }, + "_wat": { + "fontCharacter": "\\E09F", + "fontColor": "#a074c4" + }, + "_webpack_light": { + "fontCharacter": "\\E0A0", + "fontColor": "#498ba7" + }, + "_webpack": { + "fontCharacter": "\\E0A0", + "fontColor": "#519aba" + }, + "_wgt_light": { + "fontCharacter": "\\E0A1", + "fontColor": "#498ba7" + }, + "_wgt": { + "fontCharacter": "\\E0A1", + "fontColor": "#519aba" + }, + "_windows_light": { + "fontCharacter": "\\E0A2", + "fontColor": "#498ba7" + }, + "_windows": { + "fontCharacter": "\\E0A2", + "fontColor": "#519aba" + }, + "_word_light": { + "fontCharacter": "\\E0A3", + "fontColor": "#498ba7" + }, + "_word": { + "fontCharacter": "\\E0A3", + "fontColor": "#519aba" + }, + "_xls_light": { + "fontCharacter": "\\E0A4", + "fontColor": "#7fae42" + }, + "_xls": { + "fontCharacter": "\\E0A4", + "fontColor": "#8dc149" + }, + "_xml_light": { + "fontCharacter": "\\E0A5", + "fontColor": "#cc6d2e" + }, + "_xml": { + "fontCharacter": "\\E0A5", + "fontColor": "#e37933" + }, + "_yarn_light": { + "fontCharacter": "\\E0A6", + "fontColor": "#498ba7" + }, + "_yarn": { + "fontCharacter": "\\E0A6", + "fontColor": "#519aba" + }, + "_yml_light": { + "fontCharacter": "\\E0A7", + "fontColor": "#9068b0" + }, + "_yml": { + "fontCharacter": "\\E0A7", + "fontColor": "#a074c4" + }, + "_zig_light": { + "fontCharacter": "\\E0A8", + "fontColor": "#cc6d2e" + }, + "_zig": { + "fontCharacter": "\\E0A8", + "fontColor": "#e37933" + }, + "_zip_light": { + "fontCharacter": "\\E0A9", + "fontColor": "#b8383d" + }, + "_zip": { + "fontCharacter": "\\E0A9", + "fontColor": "#cc3e44" + }, + "_zip_1_light": { + "fontCharacter": "\\E0A9", + "fontColor": "#627379" + }, + "_zip_1": { + "fontCharacter": "\\E0A9", + "fontColor": "#6d8086" + } + }, + "file": "_default", + "fileExtensions": { + "bsl": "_bsl", + "mdo": "_mdo", + "cls": "_salesforce", + "apex": "_salesforce", + "asm": "_asm", + "s": "_asm", + "bicep": "_bicep", + "bzl": "_bazel", + "bazel": "_bazel", + "build": "_bazel", + "workspace": "_bazel", + "bazelignore": "_bazel", + "bazelversion": "_bazel", + "h": "_c_1", + "aspx": "_html", + "ascx": "_html_1", + "asax": "_html_2", + "master": "_html_2", + "hh": "_cpp_1", + "hpp": "_cpp_1", + "hxx": "_cpp_1", + "h++": "_cpp_1", + "edn": "_clojure_1", + "cfc": "_coldfusion", + "cfm": "_coldfusion", + "litcoffee": "_coffee", + "config": "_config", + "cr": "_crystal", + "ecr": "_crystal_embedded", + "slang": "_crystal_embedded", + "cson": "_json", + "css.map": "_css", + "sss": "_css", + "csv": "_csv", + "xls": "_xls", + "xlsx": "_xls", + "cuh": "_cu_1", + "hu": "_cu_1", + "cake": "_cake", + "ctp": "_cake_php", + "d": "_d", + "doc": "_word", + "docx": "_word", + "ejs": "_ejs", + "ex": "_elixir", + "exs": "_elixir_script", + "elm": "_elm", + "ico": "_favicon", + "gitconfig": "_git", + "gitkeep": "_git", + "gitattributes": "_git", + "gitmodules": "_git", + "slide": "_go", + "article": "_go", + "gd": "_godot", + "godot": "_godot_1", + "tres": "_godot_2", + "tscn": "_godot_3", + "gradle": "_gradle", + "gsp": "_grails", + "gql": "_graphql", + "graphql": "_graphql", + "graphqls": "_graphql", + "hack": "_hacklang", + "haml": "_haml", + "hs": "_haskell", + "lhs": "_haskell", + "hx": "_haxe", + "hxs": "_haxe_1", + "hxp": "_haxe_2", + "hxml": "_haxe_3", + "jade": "_jade", + "class": "_java_1", + "classpath": "_java", + "js.map": "_javascript", + "cjs.map": "_javascript", + "mjs.map": "_javascript", + "spec.js": "_javascript_1", + "spec.cjs": "_javascript_1", + "spec.mjs": "_javascript_1", + "test.js": "_javascript_1", + "test.cjs": "_javascript_1", + "test.mjs": "_javascript_1", + "es": "_javascript", + "es5": "_javascript", + "es7": "_javascript", + "jinja": "_jinja", + "jinja2": "_jinja", + "kt": "_kotlin", + "kts": "_kotlin", + "liquid": "_liquid", + "ls": "_livescript", + "argdown": "_argdown", + "ad": "_argdown", + "mustache": "_mustache", + "stache": "_mustache", + "nim": "_nim", + "nims": "_nim", + "github-issues": "_github", + "ipynb": "_notebook", + "njk": "_nunjucks", + "nunjucks": "_nunjucks", + "nunjs": "_nunjucks", + "nunj": "_nunjucks", + "njs": "_nunjucks", + "nj": "_nunjucks", + "npm-debug.log": "_npm", + "npmignore": "_npm_1", + "npmrc": "_npm_1", + "ml": "_ocaml", + "mli": "_ocaml", + "cmx": "_ocaml", + "cmxa": "_ocaml", + "odata": "_odata", + "php.inc": "_php", + "pipeline": "_pipeline", + "pddl": "_pddl", + "plan": "_plan", + "happenings": "_happenings", + "prisma": "_prisma", + "pp": "_puppet", + "epp": "_puppet", + "purs": "_purescript", + "spec.jsx": "_react_1", + "test.jsx": "_react_1", + "cjsx": "_react", + "spec.tsx": "_react_1", + "test.tsx": "_react_1", + "re": "_reasonml", + "res": "_rescript", + "resi": "_rescript_1", + "r": "_R", + "rmd": "_R", + "erb": "_html_erb", + "erb.html": "_html_erb", + "html.erb": "_html_erb", + "sass": "_sass", + "springbeans": "_spring", + "slim": "_slim", + "smarty.tpl": "_smarty", + "tpl": "_smarty", + "sbt": "_sbt", + "scala": "_scala", + "sol": "_ethereum", + "styl": "_stylus", + "svelte": "_svelte", + "soql": "_db_1", + "tf": "_terraform", + "tf.json": "_terraform", + "tfvars": "_terraform", + "tfvars.json": "_terraform", + "dtx": "_tex_2", + "ins": "_tex_3", + "toml": "_config", + "twig": "_twig", + "spec.ts": "_typescript_1", + "test.ts": "_typescript_1", + "vala": "_vala", + "vapi": "_vala", + "component": "_html_3", + "vue": "_vue", + "wasm": "_wasm", + "wat": "_wat", + "pro": "_prolog", + "zig": "_zig", + "jar": "_zip", + "zip": "_zip_1", + "wgt": "_wgt", + "ai": "_illustrator", + "psd": "_photoshop", + "pdf": "_pdf", + "eot": "_font", + "ttf": "_font", + "woff": "_font", + "woff2": "_font", + "otf": "_font", + "avif": "_image", + "gif": "_image", + "jpg": "_image", + "jpeg": "_image", + "png": "_image", + "pxm": "_image", + "svg": "_svg", + "svgx": "_image", + "tiff": "_image", + "webp": "_image", + "sublime-project": "_sublime", + "sublime-workspace": "_sublime", + "mov": "_video", + "ogv": "_video", + "webm": "_video", + "avi": "_video", + "mpg": "_video", + "mp4": "_video", + "mp3": "_audio", + "ogg": "_audio", + "wav": "_audio", + "flac": "_audio", + "3ds": "_svg_1", + "3dm": "_svg_1", + "stl": "_svg_1", + "obj": "_svg_1", + "dae": "_svg_1", + "babelrc": "_babel", + "babelrc.js": "_babel", + "babelrc.cjs": "_babel", + "bazelrc": "_bazel_1", + "bowerrc": "_bower", + "dockerignore": "_docker_1", + "codeclimate.yml": "_code-climate", + "eslintrc": "_eslint", + "eslintrc.js": "_eslint", + "eslintrc.cjs": "_eslint", + "eslintrc.yaml": "_eslint", + "eslintrc.yml": "_eslint", + "eslintrc.json": "_eslint", + "eslintignore": "_eslint_1", + "firebaserc": "_firebase", + "gitlab-ci.yml": "_gitlab", + "jshintrc": "_javascript_2", + "jscsrc": "_javascript_2", + "stylelintrc": "_stylelint", + "stylelintrc.json": "_stylelint", + "stylelintrc.yaml": "_stylelint", + "stylelintrc.yml": "_stylelint", + "stylelintrc.js": "_stylelint", + "stylelintignore": "_stylelint_1", + "direnv": "_config", + "static": "_config", + "slugignore": "_config", + "tmp": "_clock_1", + "htaccess": "_config", + "key": "_lock", + "cert": "_lock", + "cer": "_lock", + "crt": "_lock", + "pem": "_lock", + "ds_store": "_ignored" + }, + "fileNames": { + "mix": "_hex", + "karma.conf.js": "_karma", + "karma.conf.cjs": "_karma", + "karma.conf.mjs": "_karma", + "karma.conf.coffee": "_karma", + "readme.md": "_info", + "readme.txt": "_info", + "readme": "_info", + "changelog.md": "_clock", + "changelog.txt": "_clock", + "changelog": "_clock", + "changes.md": "_clock", + "changes.txt": "_clock", + "changes": "_clock", + "version.md": "_clock", + "version.txt": "_clock", + "version": "_clock", + "mvnw": "_maven", + "pom.xml": "_maven", + "tsconfig.json": "_tsconfig", + "vite.config.js": "_vite", + "vite.config.ts": "_vite", + "vite.config.mjs": "_vite", + "vite.config.mts": "_vite", + "vite.config.cjs": "_vite", + "vite.config.cts": "_vite", + "swagger.json": "_json_1", + "swagger.yml": "_json_1", + "swagger.yaml": "_json_1", + "mime.types": "_config", + "jenkinsfile": "_jenkins", + "babel.config.js": "_babel", + "babel.config.json": "_babel", + "babel.config.cjs": "_babel", + "build": "_bazel", + "build.bazel": "_bazel", + "workspace": "_bazel", + "workspace.bazel": "_bazel", + "bower.json": "_bower", + "docker-healthcheck": "_docker_2", + "eslint.config.js": "_eslint", + "firebase.json": "_firebase", + "geckodriver": "_firefox", + "gruntfile.js": "_grunt", + "gruntfile.babel.js": "_grunt", + "gruntfile.coffee": "_grunt", + "gulpfile": "_gulp", + "gulpfile.js": "_gulp", + "ionic.config.json": "_ionic", + "ionic.project": "_ionic", + "platformio.ini": "_platformio", + "rollup.config.js": "_rollup", + "sass-lint.yml": "_sass", + "stylelint.config.js": "_stylelint", + "stylelint.config.cjs": "_stylelint", + "stylelint.config.mjs": "_stylelint", + "yarn.clean": "_yarn", + "yarn.lock": "_yarn", + "webpack.config.js": "_webpack", + "webpack.config.cjs": "_webpack", + "webpack.config.mjs": "_webpack", + "webpack.config.ts": "_webpack", + "webpack.config.build.js": "_webpack", + "webpack.config.build.cjs": "_webpack", + "webpack.config.build.mjs": "_webpack", + "webpack.config.build.ts": "_webpack", + "webpack.common.js": "_webpack", + "webpack.common.cjs": "_webpack", + "webpack.common.mjs": "_webpack", + "webpack.common.ts": "_webpack", + "webpack.dev.js": "_webpack", + "webpack.dev.cjs": "_webpack", + "webpack.dev.mjs": "_webpack", + "webpack.dev.ts": "_webpack", + "webpack.prod.js": "_webpack", + "webpack.prod.cjs": "_webpack", + "webpack.prod.mjs": "_webpack", + "webpack.prod.ts": "_webpack", + "license": "_license", + "licence": "_license", + "license.txt": "_license", + "licence.txt": "_license", + "license.md": "_license", + "licence.md": "_license", + "copying": "_license", + "copying.txt": "_license", + "copying.md": "_license", + "compiling": "_license_1", + "compiling.txt": "_license_1", + "compiling.md": "_license_1", + "contributing": "_license_2", + "contributing.txt": "_license_2", + "contributing.md": "_license_2", + "qmakefile": "_makefile_1", + "omakefile": "_makefile_2", + "cmakelists.txt": "_makefile_3", + "procfile": "_heroku", + "todo": "_todo", + "todo.txt": "_todo", + "todo.md": "_todo", + "npm-debug.log": "_npm_ignored" + }, + "languageIds": { + "bat": "_windows", + "clojure": "_clojure", + "coffeescript": "_coffee", + "jsonc": "_json", + "json": "_json", + "c": "_c", + "cpp": "_cpp", + "cuda-cpp": "_cu", + "csharp": "_c-sharp", + "css": "_css", + "dart": "_dart", + "dockerfile": "_docker", + "dotenv": "_config", + "ignore": "_git", + "fsharp": "_f-sharp", + "git-commit": "_git", + "go": "_go2", + "groovy": "_grails", + "handlebars": "_mustache", + "html": "_html_3", + "properties": "_config", + "java": "_java", + "javascriptreact": "_react", + "javascript": "_javascript", + "julia": "_julia", + "tex": "_tex_1", + "latex": "_tex", + "less": "_less", + "lua": "_lua", + "makefile": "_makefile", + "markdown": "_markdown", + "objective-c": "_c_2", + "objective-cpp": "_cpp_2", + "perl": "_perl", + "php": "_php", + "powershell": "_powershell", + "jade": "_pug", + "python": "_python", + "r": "_R", + "razor": "_html", + "ruby": "_ruby", + "rust": "_rust", + "scss": "_sass", + "search-result": "_code-search", + "shellscript": "_shell", + "sql": "_db", + "swift": "_swift", + "typescript": "_typescript", + "typescriptreact": "_react", + "xml": "_xml", + "dockercompose": "_docker_3", + "yaml": "_yml", + "argdown": "_argdown", + "bicep": "_bicep", + "elixir": "_elixir", + "elm": "_elm", + "erb": "_html_erb", + "github-issues": "_github", + "gradle": "_gradle", + "godot": "_godot", + "haml": "_haml", + "haskell": "_haskell", + "haxe": "_haxe", + "jinja": "_jinja", + "kotlin": "_kotlin", + "mustache": "_mustache", + "nunjucks": "_nunjucks", + "ocaml": "_ocaml", + "rescript": "_rescript", + "sass": "_sass", + "stylus": "_stylus", + "terraform": "_terraform", + "todo": "_todo", + "vala": "_vala", + "vue": "_vue", + "jsonl": "_json", + "postcss": "_css", + "django-html": "_html_3", + "blade": "_php" + }, + "light": { + "file": "_default_light", + "fileExtensions": { + "bsl": "_bsl_light", + "mdo": "_mdo_light", + "cls": "_salesforce_light", + "apex": "_salesforce_light", + "asm": "_asm_light", + "s": "_asm_light", + "bicep": "_bicep_light", + "bzl": "_bazel_light", + "bazel": "_bazel_light", + "build": "_bazel_light", + "workspace": "_bazel_light", + "bazelignore": "_bazel_light", + "bazelversion": "_bazel_light", + "h": "_c_1_light", + "aspx": "_html_light", + "ascx": "_html_1_light", + "asax": "_html_2_light", + "master": "_html_2_light", + "hh": "_cpp_1_light", + "hpp": "_cpp_1_light", + "hxx": "_cpp_1_light", + "h++": "_cpp_1_light", + "edn": "_clojure_1_light", + "cfc": "_coldfusion_light", + "cfm": "_coldfusion_light", + "litcoffee": "_coffee_light", + "config": "_config_light", + "cr": "_crystal_light", + "ecr": "_crystal_embedded_light", + "slang": "_crystal_embedded_light", + "cson": "_json_light", + "css.map": "_css_light", + "sss": "_css_light", + "csv": "_csv_light", + "xls": "_xls_light", + "xlsx": "_xls_light", + "cuh": "_cu_1_light", + "hu": "_cu_1_light", + "cake": "_cake_light", + "ctp": "_cake_php_light", + "d": "_d_light", + "doc": "_word_light", + "docx": "_word_light", + "ejs": "_ejs_light", + "ex": "_elixir_light", + "exs": "_elixir_script_light", + "elm": "_elm_light", + "ico": "_favicon_light", + "gitconfig": "_git_light", + "gitkeep": "_git_light", + "gitattributes": "_git_light", + "gitmodules": "_git_light", + "slide": "_go_light", + "article": "_go_light", + "gd": "_godot_light", + "godot": "_godot_1_light", + "tres": "_godot_2_light", + "tscn": "_godot_3_light", + "gradle": "_gradle_light", + "gsp": "_grails_light", + "gql": "_graphql_light", + "graphql": "_graphql_light", + "graphqls": "_graphql_light", + "hack": "_hacklang_light", + "haml": "_haml_light", + "hs": "_haskell_light", + "lhs": "_haskell_light", + "hx": "_haxe_light", + "hxs": "_haxe_1_light", + "hxp": "_haxe_2_light", + "hxml": "_haxe_3_light", + "jade": "_jade_light", + "class": "_java_1_light", + "classpath": "_java_light", + "js.map": "_javascript_light", + "cjs.map": "_javascript_light", + "mjs.map": "_javascript_light", + "spec.js": "_javascript_1_light", + "spec.cjs": "_javascript_1_light", + "spec.mjs": "_javascript_1_light", + "test.js": "_javascript_1_light", + "test.cjs": "_javascript_1_light", + "test.mjs": "_javascript_1_light", + "es": "_javascript_light", + "es5": "_javascript_light", + "es7": "_javascript_light", + "jinja": "_jinja_light", + "jinja2": "_jinja_light", + "kt": "_kotlin_light", + "kts": "_kotlin_light", + "liquid": "_liquid_light", + "ls": "_livescript_light", + "argdown": "_argdown_light", + "ad": "_argdown_light", + "mustache": "_mustache_light", + "stache": "_mustache_light", + "nim": "_nim_light", + "nims": "_nim_light", + "github-issues": "_github_light", + "ipynb": "_notebook_light", + "njk": "_nunjucks_light", + "nunjucks": "_nunjucks_light", + "nunjs": "_nunjucks_light", + "nunj": "_nunjucks_light", + "njs": "_nunjucks_light", + "nj": "_nunjucks_light", + "npm-debug.log": "_npm_light", + "npmignore": "_npm_1_light", + "npmrc": "_npm_1_light", + "ml": "_ocaml_light", + "mli": "_ocaml_light", + "cmx": "_ocaml_light", + "cmxa": "_ocaml_light", + "odata": "_odata_light", + "php.inc": "_php_light", + "pipeline": "_pipeline_light", + "pddl": "_pddl_light", + "plan": "_plan_light", + "happenings": "_happenings_light", + "prisma": "_prisma_light", + "pp": "_puppet_light", + "epp": "_puppet_light", + "purs": "_purescript_light", + "spec.jsx": "_react_1_light", + "test.jsx": "_react_1_light", + "cjsx": "_react_light", + "spec.tsx": "_react_1_light", + "test.tsx": "_react_1_light", + "re": "_reasonml_light", + "res": "_rescript_light", + "resi": "_rescript_1_light", + "r": "_R_light", + "rmd": "_R_light", + "erb": "_html_erb_light", + "erb.html": "_html_erb_light", + "html.erb": "_html_erb_light", + "sass": "_sass_light", + "springbeans": "_spring_light", + "slim": "_slim_light", + "smarty.tpl": "_smarty_light", + "tpl": "_smarty_light", + "sbt": "_sbt_light", + "scala": "_scala_light", + "sol": "_ethereum_light", + "styl": "_stylus_light", + "svelte": "_svelte_light", + "soql": "_db_1_light", + "tf": "_terraform_light", + "tf.json": "_terraform_light", + "tfvars": "_terraform_light", + "tfvars.json": "_terraform_light", + "dtx": "_tex_2_light", + "ins": "_tex_3_light", + "toml": "_config_light", + "twig": "_twig_light", + "spec.ts": "_typescript_1_light", + "test.ts": "_typescript_1_light", + "vala": "_vala_light", + "vapi": "_vala_light", + "component": "_html_3_light", + "vue": "_vue_light", + "wasm": "_wasm_light", + "wat": "_wat_light", + "pro": "_prolog_light", + "zig": "_zig_light", + "jar": "_zip_light", + "zip": "_zip_1_light", + "wgt": "_wgt_light", + "ai": "_illustrator_light", + "psd": "_photoshop_light", + "pdf": "_pdf_light", + "eot": "_font_light", + "ttf": "_font_light", + "woff": "_font_light", + "woff2": "_font_light", + "otf": "_font_light", + "avif": "_image_light", + "gif": "_image_light", + "jpg": "_image_light", + "jpeg": "_image_light", + "png": "_image_light", + "pxm": "_image_light", + "svg": "_svg_light", + "svgx": "_image_light", + "tiff": "_image_light", + "webp": "_image_light", + "sublime-project": "_sublime_light", + "sublime-workspace": "_sublime_light", + "mov": "_video_light", + "ogv": "_video_light", + "webm": "_video_light", + "avi": "_video_light", + "mpg": "_video_light", + "mp4": "_video_light", + "mp3": "_audio_light", + "ogg": "_audio_light", + "wav": "_audio_light", + "flac": "_audio_light", + "3ds": "_svg_1_light", + "3dm": "_svg_1_light", + "stl": "_svg_1_light", + "obj": "_svg_1_light", + "dae": "_svg_1_light", + "babelrc": "_babel_light", + "babelrc.js": "_babel_light", + "babelrc.cjs": "_babel_light", + "bazelrc": "_bazel_1_light", + "bowerrc": "_bower_light", + "dockerignore": "_docker_1_light", + "codeclimate.yml": "_code-climate_light", + "eslintrc": "_eslint_light", + "eslintrc.js": "_eslint_light", + "eslintrc.cjs": "_eslint_light", + "eslintrc.yaml": "_eslint_light", + "eslintrc.yml": "_eslint_light", + "eslintrc.json": "_eslint_light", + "eslintignore": "_eslint_1_light", + "firebaserc": "_firebase_light", + "gitlab-ci.yml": "_gitlab_light", + "jshintrc": "_javascript_2_light", + "jscsrc": "_javascript_2_light", + "stylelintrc": "_stylelint_light", + "stylelintrc.json": "_stylelint_light", + "stylelintrc.yaml": "_stylelint_light", + "stylelintrc.yml": "_stylelint_light", + "stylelintrc.js": "_stylelint_light", + "stylelintignore": "_stylelint_1_light", + "direnv": "_config_light", + "static": "_config_light", + "slugignore": "_config_light", + "tmp": "_clock_1_light", + "htaccess": "_config_light", + "key": "_lock_light", + "cert": "_lock_light", + "cer": "_lock_light", + "crt": "_lock_light", + "pem": "_lock_light", + "ds_store": "_ignored_light" + }, + "languageIds": { + "bat": "_windows_light", + "clojure": "_clojure_light", + "coffeescript": "_coffee_light", + "jsonc": "_json_light", + "json": "_json_light", + "c": "_c_light", + "cpp": "_cpp_light", + "cuda-cpp": "_cu_light", + "csharp": "_c-sharp_light", + "css": "_css_light", + "dart": "_dart_light", + "dockerfile": "_docker_light", + "dotenv": "_config_light", + "ignore": "_git_light", + "fsharp": "_f-sharp_light", + "git-commit": "_git_light", + "go": "_go2_light", + "groovy": "_grails_light", + "handlebars": "_mustache_light", + "html": "_html_3_light", + "properties": "_config_light", + "java": "_java_light", + "javascriptreact": "_react_light", + "javascript": "_javascript_light", + "julia": "_julia_light", + "tex": "_tex_1_light", + "latex": "_tex_light", + "less": "_less_light", + "lua": "_lua_light", + "makefile": "_makefile_light", + "markdown": "_markdown_light", + "objective-c": "_c_2_light", + "objective-cpp": "_cpp_2_light", + "perl": "_perl_light", + "php": "_php_light", + "powershell": "_powershell_light", + "jade": "_pug_light", + "python": "_python_light", + "r": "_R_light", + "razor": "_html_light", + "ruby": "_ruby_light", + "rust": "_rust_light", + "scss": "_sass_light", + "search-result": "_code-search_light", + "shellscript": "_shell_light", + "sql": "_db_light", + "swift": "_swift_light", + "typescript": "_typescript_light", + "typescriptreact": "_react_light", + "xml": "_xml_light", + "dockercompose": "_docker_3_light", + "yaml": "_yml_light", + "argdown": "_argdown_light", + "bicep": "_bicep_light", + "elixir": "_elixir_light", + "elm": "_elm_light", + "erb": "_html_erb_light", + "github-issues": "_github_light", + "gradle": "_gradle_light", + "godot": "_godot_light", + "haml": "_haml_light", + "haskell": "_haskell_light", + "haxe": "_haxe_light", + "jinja": "_jinja_light", + "kotlin": "_kotlin_light", + "mustache": "_mustache_light", + "nunjucks": "_nunjucks_light", + "ocaml": "_ocaml_light", + "rescript": "_rescript_light", + "sass": "_sass_light", + "stylus": "_stylus_light", + "terraform": "_terraform_light", + "vala": "_vala_light", + "vue": "_vue_light", + "jsonl": "_json_light", + "postcss": "_css_light", + "django-html": "_html_3_light", + "blade": "_php_light" + }, + "fileNames": { + "mix": "_hex_light", + "karma.conf.js": "_karma_light", + "karma.conf.cjs": "_karma_light", + "karma.conf.mjs": "_karma_light", + "karma.conf.coffee": "_karma_light", + "readme.md": "_info_light", + "readme.txt": "_info_light", + "readme": "_info_light", + "changelog.md": "_clock_light", + "changelog.txt": "_clock_light", + "changelog": "_clock_light", + "changes.md": "_clock_light", + "changes.txt": "_clock_light", + "changes": "_clock_light", + "version.md": "_clock_light", + "version.txt": "_clock_light", + "version": "_clock_light", + "mvnw": "_maven_light", + "pom.xml": "_maven_light", + "tsconfig.json": "_tsconfig_light", + "vite.config.js": "_vite_light", + "vite.config.ts": "_vite_light", + "vite.config.mjs": "_vite_light", + "vite.config.mts": "_vite_light", + "vite.config.cjs": "_vite_light", + "vite.config.cts": "_vite_light", + "swagger.json": "_json_1_light", + "swagger.yml": "_json_1_light", + "swagger.yaml": "_json_1_light", + "mime.types": "_config_light", + "jenkinsfile": "_jenkins_light", + "babel.config.js": "_babel_light", + "babel.config.json": "_babel_light", + "babel.config.cjs": "_babel_light", + "build": "_bazel_light", + "build.bazel": "_bazel_light", + "workspace": "_bazel_light", + "workspace.bazel": "_bazel_light", + "bower.json": "_bower_light", + "docker-healthcheck": "_docker_2_light", + "eslint.config.js": "_eslint_light", + "firebase.json": "_firebase_light", + "geckodriver": "_firefox_light", + "gruntfile.js": "_grunt_light", + "gruntfile.babel.js": "_grunt_light", + "gruntfile.coffee": "_grunt_light", + "gulpfile": "_gulp_light", + "gulpfile.js": "_gulp_light", + "ionic.config.json": "_ionic_light", + "ionic.project": "_ionic_light", + "platformio.ini": "_platformio_light", + "rollup.config.js": "_rollup_light", + "sass-lint.yml": "_sass_light", + "stylelint.config.js": "_stylelint_light", + "stylelint.config.cjs": "_stylelint_light", + "stylelint.config.mjs": "_stylelint_light", + "yarn.clean": "_yarn_light", + "yarn.lock": "_yarn_light", + "webpack.config.js": "_webpack_light", + "webpack.config.cjs": "_webpack_light", + "webpack.config.mjs": "_webpack_light", + "webpack.config.ts": "_webpack_light", + "webpack.config.build.js": "_webpack_light", + "webpack.config.build.cjs": "_webpack_light", + "webpack.config.build.mjs": "_webpack_light", + "webpack.config.build.ts": "_webpack_light", + "webpack.common.js": "_webpack_light", + "webpack.common.cjs": "_webpack_light", + "webpack.common.mjs": "_webpack_light", + "webpack.common.ts": "_webpack_light", + "webpack.dev.js": "_webpack_light", + "webpack.dev.cjs": "_webpack_light", + "webpack.dev.mjs": "_webpack_light", + "webpack.dev.ts": "_webpack_light", + "webpack.prod.js": "_webpack_light", + "webpack.prod.cjs": "_webpack_light", + "webpack.prod.mjs": "_webpack_light", + "webpack.prod.ts": "_webpack_light", + "license": "_license_light", + "licence": "_license_light", + "license.txt": "_license_light", + "licence.txt": "_license_light", + "license.md": "_license_light", + "licence.md": "_license_light", + "copying": "_license_light", + "copying.txt": "_license_light", + "copying.md": "_license_light", + "compiling": "_license_1_light", + "compiling.txt": "_license_1_light", + "compiling.md": "_license_1_light", + "contributing": "_license_2_light", + "contributing.txt": "_license_2_light", + "contributing.md": "_license_2_light", + "qmakefile": "_makefile_1_light", + "omakefile": "_makefile_2_light", + "cmakelists.txt": "_makefile_3_light", + "procfile": "_heroku_light", + "npm-debug.log": "_npm_ignored_light" + } + }, + "version": "https://github.com/jesseweed/seti-ui/commit/2d6c5e68b4ded73c92dac291845ee44e1182d511" +} diff --git a/src/browser/assets/file-icons/seti.woff b/src/browser/assets/file-icons/seti.woff new file mode 100644 index 0000000000000000000000000000000000000000..6a8a3da7cf05b57901a2d75bfc7acf7067438f07 GIT binary patch literal 37284 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%0DSql$v{z$czc3}#|B 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 = setiIconTheme.iconDefinitions; +const setiDefaultIconId = setiIconTheme.file; +const setiFileNames = setiIconTheme.fileNames as Record; +const setiFileExtensions = setiIconTheme.fileExtensions as Record; +const setiLanguageIds = setiIconTheme.languageIds as Record; + +const setiDefaultIconDefinition: SetiIconDefinition = setiIconDefinitions[setiDefaultIconId] ?? { + fontCharacter: "\\E023", +}; + +const decodeFontCharacter = (encoded?: string): string => { + if (!encoded) return ""; + if (!encoded.startsWith("\\")) return encoded; + + const hex = encoded.slice(1); + const codePoint = Number.parseInt(hex, 16); + if (Number.isNaN(codePoint)) return ""; + + return String.fromCodePoint(codePoint); +}; + +const collectExtensionCandidates = (fileName: string): string[] => { + const parts = fileName.split("."); + if (parts.length <= 1) return []; + + const candidates: string[] = []; + for (let i = 1; i < parts.length; i++) { + const candidate = parts.slice(i).join("."); + if (candidate) { + candidates.push(candidate); + } + } + + return candidates; +}; + +const resolveSetiIconId = (fileName: string): string | undefined => { + const direct = setiFileNames[fileName]; + if (direct) return direct; + + const lowerName = fileName.toLowerCase(); + if (lowerName !== fileName) { + const lowerDirect = setiFileNames[lowerName]; + if (lowerDirect) return lowerDirect; + } + + if (fileName.startsWith(".") && fileName.length > 1) { + const withoutDot = fileName.slice(1); + const withoutDotMatch = setiFileNames[withoutDot]; + if (withoutDotMatch) return withoutDotMatch; + } + + const extensionCandidates = collectExtensionCandidates(fileName); + + for (const candidate of extensionCandidates) { + const extMatch = setiFileExtensions[candidate]; + if (extMatch) return extMatch; + + const lowerCandidate = candidate.toLowerCase(); + if (lowerCandidate !== candidate) { + const lowerExtMatch = setiFileExtensions[lowerCandidate]; + if (lowerExtMatch) return lowerExtMatch; + } + } + + const languageMatch = setiLanguageIds[lowerName]; + if (languageMatch) return languageMatch; + + for (const candidate of extensionCandidates) { + const languageIdMatch = setiLanguageIds[candidate]; + if (languageIdMatch) return languageIdMatch; + + const lowerCandidate = candidate.toLowerCase(); + if (lowerCandidate !== candidate) { + const lowerLanguageIdMatch = setiLanguageIds[lowerCandidate]; + if (lowerLanguageIdMatch) return lowerLanguageIdMatch; + } + } + + if (fileName.startsWith(".") && fileName.length > 1) { + const trimmedLower = fileName.slice(1).toLowerCase(); + const trimmedLanguageMatch = setiLanguageIds[trimmedLower]; + if (trimmedLanguageMatch) return trimmedLanguageMatch; + } + + return undefined; +}; + +const getSetiIconForFile = (fileName: string): FileIconGlyph => { + if (!fileName) { + return { + character: decodeFontCharacter(setiDefaultIconDefinition.fontCharacter) || " ", + color: setiDefaultIconDefinition.fontColor, + }; + } + + const iconId = resolveSetiIconId(fileName); + const iconDefinition = iconId ? setiIconDefinitions[iconId] : undefined; + + return { + character: + decodeFontCharacter(iconDefinition?.fontCharacter) || + decodeFontCharacter(setiDefaultIconDefinition.fontCharacter) || + " ", + color: iconDefinition?.fontColor ?? setiDefaultIconDefinition.fontColor, + }; +}; + +const BASE_ICON_STYLE: React.CSSProperties = { + fontFamily: + '"Seti", "Geist Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace', + fontSize: 14, + lineHeight: 1, + display: "inline-flex", + alignItems: "center", + justifyContent: "center", + minWidth: "1rem", + height: "1rem", + userSelect: "none", + fontStyle: "normal", + fontWeight: "normal", + letterSpacing: "normal", +}; + +export interface FileIconProps { + fileName?: string | null; + filePath?: string | null; + className?: string; + style?: React.CSSProperties; +} + +export const FileIcon: React.FC = ({ fileName, filePath, className, style }) => { + const targetName = fileName ?? (filePath ? (filePath.split("/").pop() ?? "") : ""); + + const icon = useMemo(() => getSetiIconForFile(targetName ?? ""), [targetName]); + + if (!icon.character.trim()) { + return null; + } + + return ( + + ); +}; diff --git a/src/browser/components/RightSidebar/CodeReview/FileTree.tsx b/src/browser/components/RightSidebar/CodeReview/FileTree.tsx index 814299d59..0abbe72bc 100644 --- a/src/browser/components/RightSidebar/CodeReview/FileTree.tsx +++ b/src/browser/components/RightSidebar/CodeReview/FileTree.tsx @@ -7,6 +7,7 @@ import type { FileTreeNode } from "@/common/utils/git/numstatParser"; import { usePersistedState } from "@/browser/hooks/usePersistedState"; import { getFileTreeExpandStateKey } from "@/common/constants/storage"; import { cn } from "@/common/lib/utils"; +import { FileIcon } from "@/browser/components/FileIcon"; /** * Compute read status for a directory by recursively checking all descendant files @@ -106,6 +107,8 @@ const TreeNodeContent: React.FC<{ setIsOpen(!isOpen); }; + const fallbackFileName = node.path.split("/").pop() ?? ""; + const fileNameForIcon = node.name && node.name.length > 0 ? node.name : fallbackFileName; const isSelected = selectedPath === node.path; // Compute read status for files and directories @@ -122,6 +125,8 @@ const TreeNodeContent: React.FC<{ isUnknownState = readStatus === null; } + const iconOpacity = isFullyRead ? 0.45 : isUnknownState && !isFullyRead ? 0.7 : 1; + return ( <>
) : ( <> - +