feat: add all 800 linguist language icons (#129)

* feat: add all 800 linguist language icons

This uses existing svg icons for common languages, then falls back on
the iconify library for the remaining 600 languages.

* move icon component to ui components

---------

Co-authored-by: Brendan Kellam <bshizzle1234@gmail.com>
This commit is contained in:
Konrad Staniszewski 2024-12-13 15:14:01 -08:00 committed by GitHub
parent 1ba4e8215d
commit 0b78ffd2d1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 881 additions and 86 deletions

View file

@ -34,6 +34,7 @@
"@codemirror/state": "^6.4.1", "@codemirror/state": "^6.4.1",
"@codemirror/view": "^6.33.0", "@codemirror/view": "^6.33.0",
"@hookform/resolvers": "^3.9.0", "@hookform/resolvers": "^3.9.0",
"@iconify/react": "^5.1.0",
"@radix-ui/react-dropdown-menu": "^2.1.1", "@radix-ui/react-dropdown-menu": "^2.1.1",
"@radix-ui/react-icons": "^1.3.0", "@radix-ui/react-icons": "^1.3.0",
"@radix-ui/react-label": "^2.1.0", "@radix-ui/react-label": "^2.1.0",

View file

@ -5,9 +5,9 @@ import { cn, getRepoCodeHostInfo } from "@/lib/utils";
import { SetStateAction, useCallback, useEffect, useState } from "react"; import { SetStateAction, useCallback, useEffect, useState } from "react";
import { Entry } from "./entry"; import { Entry } from "./entry";
import { Filter } from "./filter"; import { Filter } from "./filter";
import { getLanguageIcon } from "./languageIcons";
import Image from "next/image"; import Image from "next/image";
import { LaptopIcon, QuestionMarkCircledIcon } from "@radix-ui/react-icons"; import { LaptopIcon } from "@radix-ui/react-icons";
import { FileIcon } from "@/components/ui/fileIcon";
interface FilePanelProps { interface FilePanelProps {
matches: SearchResultFile[]; matches: SearchResultFile[];
@ -58,16 +58,9 @@ export const FilterPanel = ({
"Language", "Language",
matches, matches,
(key) => { (key) => {
const iconSrc = getLanguageIcon(key); const Icon = (
const Icon = iconSrc ? ( <FileIcon language={key} />
<Image )
src={iconSrc}
alt={key}
className="w-4 h-4 flex-shrink-0"
/>
) : (
<QuestionMarkCircledIcon className="w-4 h-4 flex-shrink-0" />
);
return { return {
key, key,

View file

@ -0,0 +1,37 @@
'use client';
import { getFileIconSvg } from "./fileIconSvg";
import { getFileIconIconify } from "./fileIconIconify"
import Image from "next/image";
import { QuestionMarkCircledIcon } from "@radix-ui/react-icons";
import { Icon } from '@iconify/react';
interface FileIconProps {
language: string;
}
export const FileIcon = ({ language }: FileIconProps) => {
const iconSvg = getFileIconSvg(language);
let iconifyName = null;
if (!iconSvg) {
iconifyName = getFileIconIconify(language);
}
if (iconSvg) {
return (
<Image
src={iconSvg}
alt={language}
className="w-4 h-4 flex-shrink-0"
/>
)
} else if (iconifyName) {
return (
<Icon icon={iconifyName} className="w-4 h-4 flex-shrink-0" />
)
} else {
return (
<QuestionMarkCircledIcon className="w-4 h-4 flex-shrink-0" />
)
}
};

View file

@ -0,0 +1,760 @@
// https://github.com/github-linguist/linguist/blob/main/lib/linguist/languages.yml
export const getFileIconIconify = (language: string): string | null => {
// icons from:
// https://icon-sets.iconify.design/?&list=icons
const languageIconMap: { [key: string]: string | null } = {
"1C Enterprise": null,
"2-Dimensional Array": null,
"4D": null,
"ABAP": "file-icons:abap",
"ABAP CDS": "file-icons:abap",
"ABNF": null,
"AGS Script": "vscode-icons:file-type-c3",
"AIDL": null,
"AL": "vscode-icons:file-type-al",
"AMPL": "file-icons:ampl",
"ANTLR": "vscode-icons:file-type-antlr",
"API Blueprint": "vscode-icons:file-type-apib",
"APL": "vscode-icons:file-type-apl",
"ASL": null,
"ASN.1": null,
"ASP.NET": "vscode-icons:file-type-asp",
"ATS": "vscode-icons:file-type-ats",
"ActionScript": "vscode-icons:file-type-actionscript",
"Ada": "vscode-icons:file-type-ada",
"Adblock Filter List": null,
"Adobe Font Metrics": "simple-icons:adobefonts",
"Agda": "file-icons:agda",
"Alloy": "file-icons:alloy",
"Alpine Abuild": "file-icons:alpine-linux",
"Altium Designer": "simple-icons:altiumdesigner",
"AngelScript": "file-icons:angelscript",
"Ant Build System": "file-icons:apache-ant",
"Antlers": null,
"ApacheConf": "vscode-icons:file-type-apache",
"Apex": "vscode-icons:file-type-java",
"Apollo Guidance Computer": "file-icons:assembly-generic",
"AppleScript": "vscode-icons:file-type-applescript",
"Arc": null,
"AsciiDoc": "vscode-icons:file-type-asciidoc",
"AspectJ": null,
"Assembly": "file-icons:assembly-generic",
"Astro": "vscode-icons:file-type-astro",
"Asymptote": "file-icons:asymptote",
"Augeas": "file-icons:augeas",
"AutoHotkey": "file-icons:autohotkey",
"AutoIt": "file-icons:autoit",
"Avro IDL": "vscode-icons:file-type-apache",
"Awk": "vscode-icons:file-type-awk",
"B4X": null,
"BASIC": "devicon:visualbasic",
"BQN": null,
"Ballerina": "vscode-icons:file-type-ballerina",
"Batchfile": "vscode-icons:file-type-bat",
"Beef": null,
"Befunge": "vscode-icons:file-type-befunge",
"Berry": null,
"BibTeX": "file-icons:bibtex",
"Bicep": "vscode-icons:file-type-bicep",
"Bikeshed": "file-icons:bikeshed",
"Bison": "file-icons:bison",
"BitBake": null,
"Blade": "vscode-icons:file-type-blade",
"BlitzBasic": "vscode-icons:file-type-blitzbasic",
"BlitzMax": null,
"Bluespec": "file-icons:bluespec",
"Bluespec BH": "file-icons:bluespec",
"Boo": "file-icons:boo",
"Boogie": null,
"Brainfuck": "file-icons:brainfuck",
"BrighterScript": null,
"Brightscript": null,
"Browserslist": "file-icons:browserslist",
"C": "vscode-icons:file-type-c",
"C#": "vscode-icons:file-type-csharp",
"C++": "vscode-icons:file-type-cpp",
"C-ObjDump": null,
"C2hs Haskell": "vscode-icons:file-type-haskell",
"CAP CDS": null,
"CIL": null,
"CLIPS": "file-icons:clips",
"CMake": "vscode-icons:file-type-cmake",
"COBOL": "vscode-icons:file-type-cobol",
"CODEOWNERS": "vscode-icons:file-type-codeowners",
"COLLADA": null,
"CSON": "file-icons:config-coffeescript",
"CSS": "vscode-icons:file-type-css",
"CSV": "vscode-icons:file-type-excel",
"CUE": null,
"CWeb": null,
"Cabal Config": "vscode-icons:file-type-cabal",
"Caddyfile": "vscode-icons:file-type-caddy",
"Cadence": null,
"Cairo": "file-icons:cairo",
"Cairo Zero": "file-icons:cairo",
"CameLIGO": null,
"Cap'n Proto": null,
"Carbon": "devicon:carbon",
"CartoCSS": null,
"Ceylon": "vscode-icons:file-type-ceylon",
"Chapel": "file-icons:chapel",
"Charity": null,
"Checksums": null,
"ChucK": "file-icons:chuck",
"Circom": null,
"Cirru": "file-icons:cirru",
"Clarion": "file-icons:clarion",
"Clarity": "devicon:clarity",
"Classic ASP": "vscode-icons:file-type-asp",
"Clean": null,
"Click": "file-icons:click",
"Clojure": "vscode-icons:file-type-clojure",
"Closure Templates": null,
"Cloud Firestore Security Rules": null,
"CoNLL-U": null,
"CodeQL": "vscode-icons:file-type-codeql",
"CoffeeScript": "vscode-icons:file-type-coffeescript",
"ColdFusion": "file-icons:coldfusion",
"ColdFusion CFC": "file-icons:coldfusion",
"Common Lisp": "file-icons:common-lisp",
"Common Workflow Language": "file-icons:cwl",
"Component Pascal": "file-icons:component-pascal",
"Cool": null,
"Coq": "file-icons:coq",
"Cpp-ObjDump": null,
"Creole": "file-icons:creole",
"Crystal": "vscode-icons:file-type-crystal",
"Csound": "file-icons:csound",
"Csound Document": "file-icons:csound",
"Csound Score": "file-icons:csound",
"Cuda": "vscode-icons:file-type-cuda",
"Cue Sheet": null,
"Curry": "file-icons:curry",
"Cycript": null,
"Cylc": null,
"Cypher": null,
"Cython": "file-icons:cython",
"D": "vscode-icons:file-type-dlang",
"D-ObjDump": "vscode-icons:file-type-dlang",
"D2": null,
"DIGITAL Command Language": null,
"DM": null,
"DNS Zone": null,
"DTrace": null,
"Dafny": "file-icons:dafny",
"Darcs Patch": "file-icons:darcs-patch",
"Dart": "vscode-icons:file-type-dartlang",
"DataWeave": "file-icons:dataweave",
"Debian Package Control File": "vscode-icons:file-type-debian",
"DenizenScript": null,
"Dhall": "vscode-icons:file-type-dhall",
"Diff": "vscode-icons:file-type-diff",
"DirectX 3D File": null,
"Dockerfile": "vscode-icons:file-type-docker",
"Dogescript": "file-icons:dogescript",
"Dotenv": "vscode-icons:file-type-dotenv",
"Dune": null,
"Dylan": "vscode-icons:file-type-dylan",
"E": null,
"E-mail": null,
"EBNF": null,
"ECL": null,
"ECLiPSe": "devicon:eclipse",
"EJS": "vscode-icons:file-type-ejs",
"EQ": "file-icons:eq",
"Eagle": "file-icons:eagle",
"Earthly": "vscode-icons:file-type-earthly",
"Easybuild": "file-icons:easybuild",
"Ecere Projects": "file-icons:ecere",
"Ecmarkup": null,
"Edge": "file-icons:edge",
"EdgeQL": null,
"EditorConfig": "file-icons:editorconfig",
"Edje Data Collection": null,
"Eiffel": "file-icons:eiffel",
"Elixir": "vscode-icons:file-type-elixir",
"Elm": "vscode-icons:file-type-elm",
"Elvish": null,
"Elvish Transcript": null,
"Emacs Lisp": "file-icons:emacs",
"EmberScript": "file-icons:emberscript",
"Erlang": "vscode-icons:file-type-erlang",
"Euphoria": null,
"F#": "vscode-icons:file-type-fsharp",
"F*": null,
"FIGlet Font": null,
"FIRRTL": null,
"FLUX": "file-icons:flux",
"Factor": "file-icons:factor",
"Fancy": "file-icons:fancy",
"Fantom": "file-icons:fantom",
"Faust": "file-icons:faust",
"Fennel": null,
"Filebench WML": null,
"Filterscript": null,
"Fluent": null,
"Formatted": null,
"Forth": null,
"Fortran": "vscode-icons:file-type-fortran",
"Fortran Free Form": "vscode-icons:file-type-fortran",
"FreeBASIC": null,
"FreeMarker": "vscode-icons:file-type-freemarker",
"Frege": "file-icons:frege",
"Futhark": "file-icons:futhark",
"G-code": "vscode-icons:file-type-gcode",
"GAML": null,
"GAMS": "file-icons:gams",
"GAP": "file-icons:gap",
"GCC Machine Description": "devicon:gcc",
"GDB": "file-icons:gdb",
"GDScript": "file-icons:gdb",
"GEDCOM": null,
"GLSL": "vscode-icons:file-type-glsl",
"GN": "vscode-icons:file-type-python",
"GSC": null,
"Game Maker Language": null,
"Gemfile.lock": "file-icons:rubygems",
"Gemini": null,
"Genero 4gl": null,
"Genero per": null,
"Genie": null,
"Genshi": "file-icons:genshi",
"Gentoo Ebuild": "file-icons:gentoo",
"Gentoo Eclass": "file-icons:gentoo",
"Gerber Image": null,
"Gettext Catalog": null,
"Gherkin": null,
"Git Attributes": "vscode-icons:file-type-git",
"Git Config": "vscode-icons:file-type-git",
"Git Revision List": "vscode-icons:file-type-git",
"Gleam": "vscode-icons:file-type-gleam",
"Glimmer JS": null,
"Glimmer TS": null,
"Glyph": "file-icons:glyphs",
"Glyph Bitmap Distribution Format": "file-icons:glyphs",
"Gnuplot": "vscode-icons:file-type-gnuplot",
"Go": "vscode-icons:file-type-go",
"Go Checksums": "vscode-icons:file-type-go",
"Go Module": "vscode-icons:file-type-go",
"Go Workspace": "vscode-icons:file-type-go",
"Godot Resource": "vscode-icons:file-type-godot",
"Golo": "file-icons:golo",
"Gosu": "file-icons:gosu",
"Grace": null,
"Gradle": "vscode-icons:file-type-gradle",
"Gradle Kotlin DSL": "vscode-icons:file-type-gradle",
"Grammatical Framework": null,
"Graph Modeling Language": null,
"GraphQL": "vscode-icons:file-type-graphql",
"Graphviz (DOT)": "file-icons:graphviz",
"Groovy": "vscode-icons:file-type-groovy",
"Groovy Server Pages": "vscode-icons:file-type-groovy",
"HAProxy": null,
"HCL": "simple-icons:hcl",
"HLSL": "vscode-icons:file-type-hlsl",
"HOCON": null,
"HTML": "vscode-icons:file-type-html",
"HTML+ECR": "vscode-icons:file-type-html",
"HTML+EEX": "vscode-icons:file-type-html",
"HTML+ERB": "vscode-icons:file-type-html",
"HTML+PHP": "vscode-icons:file-type-html",
"HTML+Razor": "vscode-icons:file-type-html",
"HTTP": "vscode-icons:file-type-http",
"HXML": null,
"Hack": "file-icons:hack",
"Haml": "vscode-icons:file-type-haml",
"Handlebars": "vscode-icons:file-type-handlebars",
"Harbour": "vscode-icons:file-type-harbour",
"Hare": null,
"Haskell": "vscode-icons:file-type-haskell",
"Haxe": "vscode-icons:file-type-haxe",
"HiveQL": null,
"HolyC": "file-icons:templeos",
"Hosts File": null,
"Hy": "vscode-icons:file-type-hy",
"HyPhy": null,
"IDL": "file-icons:idl",
"IGOR Pro": "file-icons:igor-pro",
"INI": "vscode-icons:file-type-ini",
"IRC log": null,
"Idris": "vscode-icons:file-type-idris",
"Ignore List": "vscode-icons:file-type-git",
"ImageJ Macro": "simple-icons:imagej",
"Imba": "file-icons:imba",
"Inform 7": "file-icons:inform7",
"Ink": "vscode-icons:file-type-ink",
"Inno Setup": "vscode-icons:file-type-innosetup",
"Io": "vscode-icons:file-type-io",
"Ioke": "file-icons:ioke",
"Isabelle": "file-icons:isabelle",
"Isabelle ROOT": "file-icons:isabelle",
"J": null,
"JAR Manifest": "vscode-icons:file-type-java",
"JCL": null,
"JFlex": null,
"JSON": "vscode-icons:file-type-json",
"JSON with Comments": "vscode-icons:file-type-json",
"JSON5": "vscode-icons:file-type-json5",
"JSONLD": "vscode-icons:file-type-json",
"JSONiq": "vscode-icons:file-type-json",
"Janet": "vscode-icons:file-type-janet",
"Jasmin": null,
"Java": "vscode-icons:file-type-java",
"Java Properties": "vscode-icons:file-type-java",
"Java Server Pages": "vscode-icons:file-type-java",
"Java Template Engine": "vscode-icons:file-type-java",
"JavaScript": "vscode-icons:file-type-js",
"JavaScript+ERB": "vscode-icons:file-type-js",
"Jest Snapshot": "vscode-icons:file-type-jest-snapshot",
"JetBrains MPS": "logos:jetbrains-icon",
"Jinja": "vscode-icons:file-type-jinja",
"Jison": "file-icons:jison",
"Jison Lex": "file-icons:jison",
"Jolie": "file-icons:jolie",
"Jsonnet": "vscode-icons:file-type-jsonnet",
"Julia": "vscode-icons:file-type-julia",
"Julia REPL": "vscode-icons:file-type-julia",
"Jupyter Notebook": "vscode-icons:file-type-jupyter",
"Just": null,
"KRL": "file-icons:krl",
"Kaitai Struct": "file-icons:kaitai",
"KakouneScript": null,
"KerboScript": null,
"KiCad Layout": "file-icons:kicad",
"KiCad Legacy Layout": "file-icons:kicad",
"KiCad Schematic": "file-icons:kicad",
"Kickstart": null,
"Kit": null,
"Kotlin": "vscode-icons:file-type-kotlin",
"Kusto": "vscode-icons:file-type-kusto",
"LFE": "file-icons:lfe",
"LLVM": "file-icons:llvm",
"LOLCODE": "vscode-icons:file-type-lolcode",
"LSL": "vscode-icons:file-type-lsl",
"LTspice Symbol": "simple-icons:ltspice",
"LabVIEW": "file-icons:labview",
"Lark": "file-icons:lark",
"Lasso": "file-icons:lasso",
"Latte": null,
"Lean": "file-icons:lean",
"Lean 4": "file-icons:lean",
"Less": "vscode-icons:file-type-less",
"Lex": "vscode-icons:file-type-lex",
"LigoLANG": null,
"LilyPond": "vscode-icons:file-type-lilypond",
"Limbo": null,
"Linker Script": "vscode-icons:file-type-text",
"Linux Kernel Module": "devicon:linux",
"Liquid": "vscode-icons:file-type-liquid",
"Literate Agda": "file-icons:agda",
"Literate CoffeeScript": "vscode-icons:file-type-coffeescript",
"Literate Haskell": "vscode-icons:file-type-haskell",
"LiveCode Script": null,
"LiveScript": "vscode-icons:file-type-livescript",
"Logos": null,
"Logtalk": "file-icons:logtalk",
"LookML": "file-icons:lookml",
"LoomScript": null,
"Lua": "vscode-icons:file-type-lua",
"Luau": "vscode-icons:file-type-luau",
"M": null,
"M4": null,
"M4Sugar": null,
"MATLAB": "vscode-icons:file-type-matlab",
"MAXScript": "vscode-icons:file-type-maxscript",
"MDX": "vscode-icons:file-type-mdx",
"MLIR": null,
"MQL4": null,
"MQL5": null,
"MTML": null,
"MUF": null,
"Macaulay2": "file-icons:macaulay2",
"Makefile": "vscode-icons:file-type-makefile",
"Mako": "file-icons:mako",
"Markdown": "vscode-icons:file-type-markdown",
"Marko": "vscode-icons:file-type-marko",
"Mask": null,
"Mathematica": "file-icons:mathematica",
"Maven POM": "vscode-icons:file-type-maven",
"Max": "file-icons:max",
"Mercury": null,
"Mermaid": "vscode-icons:file-type-mermaid",
"Meson": "vscode-icons:file-type-meson",
"Metal": "file-icons:metal",
"Microsoft Developer Studio Project": null,
"Microsoft Visual Studio Solution": null,
"MiniD": null,
"MiniYAML": "vscode-icons:file-type-yaml",
"Mint": "file-icons:mint",
"Mirah": "file-icons:mirah",
"Modelica": "file-icons:modelica",
"Modula-2": "file-icons:modula-2",
"Modula-3": "file-icons:modula-3",
"Module Management System": null,
"Mojo": "vscode-icons:file-type-mojo",
"Monkey": "file-icons:monkey",
"Monkey C": "file-icons:monkey",
"Moocode": null,
"MoonBit": null,
"MoonScript": null,
"Motoko": null,
"Motorola 68K Assembly": "file-icons:assembly-motorola",
"Move": null,
"Muse": null,
"Mustache": "vscode-icons:file-type-mustache",
"Myghty": null,
"NASL": null,
"NCL": null,
"NEON": "file-icons:neon",
"NL": null,
"NMODL": null,
"NPM Config": "vscode-icons:file-type-npm",
"NSIS": "file-icons:nsis",
"NWScript": "file-icons:nwscript",
"Nasal": null,
"Nearley": null,
"Nemerle": "file-icons:nemerle",
"NetLinx": "file-icons:netlinx",
"NetLinx+ERB": "file-icons:netlinx",
"NetLogo": "file-icons:netlogo",
"NewLisp": "file-icons:lisp",
"Nextflow": "vscode-icons:file-type-nextflow",
"Nginx": "vscode-icons:file-type-nginx",
"Nim": "vscode-icons:file-type-nim",
"Ninja": "vscode-icons:file-type-ninja",
"Nit": null,
"Nix": "vscode-icons:file-type-nix",
"Noir": null,
"Nu": null,
"NumPy": "vscode-icons:file-type-numpy",
"Nunjucks": "vscode-icons:file-type-nunjucks",
"Nushell": "vscode-icons:file-type-shell",
"OASv2-json": "vscode-icons:file-type-json",
"OASv2-yaml": "vscode-icons:file-type-yaml",
"OASv3-json": "vscode-icons:file-type-json",
"OASv3-yaml": "vscode-icons:file-type-yaml",
"OCaml": "vscode-icons:file-type-ocaml",
"Oberon": "file-icons:oberon",
"ObjDump": null,
"Object Data Instance Notation": null,
"ObjectScript": null,
"Objective-C": "vscode-icons:file-type-objectivec",
"Objective-C++": "vscode-icons:file-type-objectivecpp",
"Objective-J": null,
"Odin": "file-icons:odin",
"Omgrofl": null,
"Opa": "file-icons:opa",
"Opal": null,
"Open Policy Agent": "file-icons:openpolicyagent",
"OpenAPI Specification v2": "file-icons:openapi",
"OpenAPI Specification v3": "file-icons:openapi",
"OpenCL": "vscode-icons:file-type-opencl",
"OpenEdge ABL": null,
"OpenQASM": null,
"OpenRC runscript": null,
"OpenSCAD": "vscode-icons:file-type-openscad",
"OpenStep Property List": null,
"OpenType Feature File": null,
"Option List": null,
"Org": "vscode-icons:file-type-org",
"Ox": null,
"Oxygene": "file-icons:oxygene",
"Oz": "file-icons:oz",
"P4": "file-icons:p4",
"PDDL": "vscode-icons:file-type-pddl",
"PEG.js": "file-icons:pegjs",
"PHP": "vscode-icons:file-type-php",
"PLSQL": "vscode-icons:file-type-plsql",
"PLpgSQL": null,
"POV-Ray SDL": "file-icons:pov-ray",
"Pact": null,
"Pan": null,
"Papyrus": "file-icons:papyrus",
"Parrot": "file-icons:parrot",
"Parrot Assembly": "file-icons:assembly-generic",
"Parrot Internal Representation": null,
"Pascal": "file-icons:pascal",
"Pawn": null,
"Pep8": "vscode-icons:file-type-python",
"Perl": "vscode-icons:file-type-perl",
"Pic": null,
"Pickle": "file-icons:pickle",
"PicoLisp": "file-icons:picolisp",
"PigLatin": null,
"Pike": "file-icons:pike",
"Pip Requirements": "vscode-icons:file-type-pip",
"Pkl": null,
"PlantUML": "vscode-icons:file-type-plantuml",
"Pod": "vscode-icons:file-type-perl",
"Pod 6": "vscode-icons:file-type-perl",
"PogoScript": "file-icons:pogoscript",
"Polar": null,
"Pony": "vscode-icons:file-type-pony",
"Portugol": null,
"PostCSS": "vscode-icons:file-type-postcss",
"PostScript": "file-icons:postscript",
"PowerBuilder": "file-icons:powerbuilder",
"PowerShell": "vscode-icons:file-type-powershell",
"Praat": null,
"Prisma": "vscode-icons:file-type-prisma",
"Processing": "vscode-icons:file-type-processinglang",
"Procfile": "vscode-icons:file-type-procfile",
"Proguard": null,
"Prolog": "vscode-icons:file-type-prolog",
"Promela": null,
"Propeller Spin": "file-icons:propeller",
"Protocol Buffer": "vscode-icons:file-type-protobuf",
"Protocol Buffer Text Format": "vscode-icons:file-type-protobuf",
"Public Key": "vscode-icons:file-type-key",
"Pug": "vscode-icons:file-type-pug",
"Puppet": "vscode-icons:file-type-puppet",
"Pure Data": null,
"PureBasic": "file-icons:purebasic",
"PureScript": "vscode-icons:file-type-purescript",
"Pyret": "vscode-icons:file-type-pyret",
"Python": "vscode-icons:file-type-python",
"Python console": "vscode-icons:file-type-python",
"Python traceback": "vscode-icons:file-type-python",
"Q#": "vscode-icons:file-type-qsharp",
"QML": "vscode-icons:file-type-qml",
"QMake": null,
"Qt Script": "file-icons:qt",
"Quake": null,
"QuickBASIC": null,
"R": "vscode-icons:file-type-r",
"RAML": "vscode-icons:file-type-raml",
"RBS": null,
"RDoc": "file-icons:rdoc",
"REALbasic": "file-icons:realbasic",
"REXX": "vscode-icons:file-type-rexx",
"RMarkdown": "file-icons:rmarkdown",
"RON": "vscode-icons:file-type-ron",
"RPC": null,
"RPGLE": null,
"RPM Spec": "devicon:redhat-wordmark",
"RUNOFF": null,
"Racket": "vscode-icons:file-type-racket",
"Ragel": null,
"Raku": "vscode-icons:file-type-raku",
"Rascal": "file-icons:rascal",
"Raw token data": null,
"ReScript": "vscode-icons:file-type-rescript",
"Readline Config": null,
"Reason": "vscode-icons:file-type-reason",
"ReasonLIGO": null,
"Rebol": "file-icons:rebol",
"Record Jar": null,
"Red": "file-icons:red",
"Redcode": null,
"Redirect Rules": null,
"Regular Expression": null,
"Ren'Py": "devicon:renpy",
"RenderScript": null,
"Rez": null,
"Rich Text Format": null,
"Ring": "file-icons:ring",
"Riot": "vscode-icons:file-type-riot",
"RobotFramework": "vscode-icons:file-type-robotframework",
"Roc": null,
"Roff": "file-icons:manpage",
"Roff Manpage": "file-icons:manpage",
"Rouge": null,
"RouterOS Script": null,
"Ruby": "vscode-icons:file-type-ruby",
"Rust": "vscode-icons:file-type-rust",
"SAS": "vscode-icons:file-type-sas",
"SCSS": "vscode-icons:file-type-scss",
"SELinux Policy": "devicon:linux",
"SMT": null,
"SPARQL": "vscode-icons:file-type-sparql",
"SQF": "vscode-icons:file-type-sqf",
"SQL": "vscode-icons:file-type-sql",
"SQLPL": null,
"SRecode Template": null,
"SSH Config": null,
"STAR": null,
"STL": null,
"STON": null,
"SVG": "vscode-icons:file-type-svg",
"SWIG": "vscode-icons:file-type-swig",
"Sage": "file-icons:sage",
"SaltStack": "vscode-icons:file-type-saltstack",
"Sass": "vscode-icons:file-type-sass",
"Scala": "vscode-icons:file-type-scala",
"Scaml": null,
"Scenic": null,
"Scheme": "file-icons:scheme",
"Scilab": "vscode-icons:file-type-scilab",
"Self": "file-icons:self",
"ShaderLab": "vscode-icons:file-type-shaderlab",
"Shell": "vscode-icons:file-type-shell",
"ShellCheck Config": "file-icons:shellcheck",
"ShellSession": "vscode-icons:file-type-shell",
"Shen": "file-icons:shen",
"Sieve": null,
"Simple File Verification": null,
"Singularity": null,
"Slash": "file-icons:slash",
"Slice": "vscode-icons:file-type-slice",
"Slim": "vscode-icons:file-type-slim",
"Slint": "vscode-icons:file-type-slint",
"SmPL": null,
"Smali": null,
"Smalltalk": null,
"Smarty": "vscode-icons:file-type-smarty",
"Smithy": null,
"Snakemake": "vscode-icons:file-type-snakemake",
"Solidity": "vscode-icons:file-type-solidity",
"Soong": null,
"SourcePawn": null,
"Spline Font Database": null,
"Squirrel": "vscode-icons:file-type-squirrel",
"Stan": "vscode-icons:file-type-stan",
"Standard ML": null,
"Starlark": null,
"Stata": "vscode-icons:file-type-stata",
"StringTemplate": null,
"Stylus": "vscode-icons:file-type-stylus",
"SubRip Text": null,
"SugarSS": null,
"SuperCollider": "file-icons:supercollider",
"Svelte": "vscode-icons:file-type-svelte",
"Sway": null,
"Sweave": null,
"Swift": "vscode-icons:file-type-swift",
"SystemVerilog": "vscode-icons:file-type-systemverilog",
"TI Program": null,
"TL-Verilog": "vscode-icons:file-type-verilog",
"TLA": "file-icons:tla",
"TOML": "vscode-icons:file-type-toml",
"TSPLIB data": null,
"TSQL": null,
"TSV": null,
"TSX": "vscode-icons:file-type-reactts",
"TXL": "file-icons:txl",
"Tact": null,
"Talon": null,
"Tcl": "vscode-icons:file-type-tcl",
"Tcsh": null,
"TeX": "vscode-icons:file-type-tex",
"Tea": null,
"Terra": "vscode-icons:file-type-terraform",
"Terraform Template": "vscode-icons:file-type-terraform",
"Texinfo": "vscode-icons:file-type-tex",
"Text": "vscode-icons:file-type-text",
"TextGrid": null,
"TextMate Properties": "file-icons:textmate",
"Textile": "vscode-icons:file-type-textile",
"Thrift": null,
"Toit": "vscode-icons:file-type-toit",
"Turing": "file-icons:turing",
"Turtle": null,
"Twig": "vscode-icons:file-type-twig",
"Type Language": null,
"TypeScript": null,
"TypeSpec": "vscode-icons:file-type-typescript",
"Typst": null,
"Unified Parallel C": null,
"Unity3D Asset": "devicon:unity",
"Unix Assembly": "file-icons:assembly-generic",
"Uno": "file-icons:uno",
"UnrealScript": "file-icons:unrealscript",
"UrWeb": "file-icons:urweb",
"V": null,
"VBA": "vscode-icons:file-type-vba",
"VBScript": "vscode-icons:file-type-vb",
"VCL": "file-icons:vcl",
"VHDL": "vscode-icons:file-type-vhdl",
"Vala": "vscode-icons:file-type-vala",
"Valve Data Format": null,
"Velocity Template Language": "vscode-icons:file-type-velocity",
"Verilog": "vscode-icons:file-type-verilog",
"Vim Help File": "vscode-icons:file-type-vim",
"Vim Script": "vscode-icons:file-type-vim",
"Vim Snippet": "vscode-icons:file-type-vim",
"Visual Basic .NET": "vscode-icons:file-type-vbproj",
"Visual Basic 6.0": "vscode-icons:file-type-vbproj",
"Volt": "vscode-icons:file-type-volt",
"Vue": "vscode-icons:file-type-vue",
"Vyper": "vscode-icons:file-type-vyper",
"WDL": "file-icons:wdl",
"WGSL": "vscode-icons:file-type-wgsl",
"Wavefront Material": null,
"Wavefront Object": null,
"Web Ontology Language": null,
"WebAssembly": "file-icons:webassembly",
"WebAssembly Interface Type": "file-icons:webassembly",
"WebIDL": null,
"WebVTT": "file-icons:webvtt",
"Wget Config": "file-icons:wget",
"Whiley": null,
"Wikitext": "vscode-icons:file-type-wikitext",
"Win32 Message File": "devicon:windows8",
"Windows Registry Entries": "devicon:windows8",
"Witcher Script": null,
"Wollok": null,
"World of Warcraft Addon Data": null,
"Wren": null,
"X BitMap": null,
"X Font Directory Index": null,
"X PixMap": null,
"X10": "file-icons:x10",
"XC": null,
"XCompose": null,
"XML": "vscode-icons:file-type-xml",
"XML Property List": "vscode-icons:file-type-xml",
"XPages": "file-icons:xpages",
"XProc": null,
"XQuery": "vscode-icons:file-type-xquery",
"XS": null,
"XSLT": "vscode-icons:file-type-excel",
"Xojo": null,
"Xonsh": null,
"Xtend": "file-icons:xtend",
"YAML": "vscode-icons:file-type-yaml",
"YANG": "vscode-icons:file-type-yang",
"YARA": "file-icons:yara",
"YASnippet": null,
"Yacc": "vscode-icons:file-type-yacc",
"Yul": null,
"ZAP": null,
"ZIL": null,
"Zeek": null,
"ZenScript": null,
"Zephir": "file-icons:zephir",
"Zig": "vscode-icons:file-type-zig",
"Zimpl": null,
"cURL Config": "file-icons:curl",
"crontab": "eos-icons:cronjob",
"desktop": null,
"dircolors": null,
"eC": "file-icons:ec",
"edn": null,
"fish": null,
"hoon": null,
"iCalendar": null,
"jq": null,
"kvlang": null,
"mIRC Script": "file-icons:mirc",
"mcfunction": null,
"mupad": "file-icons:mupad",
"nanorc": null,
"nesC": null,
"omnetpp-msg": null,
"omnetpp-ned": null,
"ooc": "file-icons:ooc",
"q": null,
"reStructuredText": "file-icons:restructuredtext",
"robots.txt": "vscode-icons:file-type-text",
"sed": null,
"templ": "vscode-icons:file-type-templ",
"vCard": null,
"wisp": null,
"xBase": null,
};
if (languageIconMap[language]) {
return languageIconMap[language];
} else {
return null;
}
};

View file

@ -32,79 +32,70 @@ import PowershellIcon from "@/public/languages/file_type_powershell.svg";
import TexIcon from "@/public/languages/file_type_tex.svg"; import TexIcon from "@/public/languages/file_type_tex.svg";
import AssemblyIcon from "@/public/languages/file_type_assembly.svg"; import AssemblyIcon from "@/public/languages/file_type_assembly.svg";
export const getLanguageIcon = (language: string) => { /**
switch (language.toLowerCase()) { * Get the SVG icon for a linguist language
case "tsx": * https://github.com/github-linguist/linguist/blob/main/lib/linguist/languages.yml
case "typescript": */
return TypeScriptIcon; export const getFileIconSvg = (language: string): any | null => {
case "jsx": const languageIconMap: { [key: string]: any } = {
case "javascript": "Assembly": AssemblyIcon,
return JavaScriptIcon; "C": CIcon,
case "go": "C#": CSharpIcon,
return GoIcon; "C++": CppIcon,
case "markdown": "CSS": CSSIcon,
return MarkdownIcon; "Dart": DartIcon,
case "c": "GN": PythonIcon,
return CIcon; "Go": GoIcon,
case "c++": "HTML+ECR": HTMLIcon,
return CppIcon; "HTML+EEX": HTMLIcon,
case "python": "HTML+ERB": HTMLIcon,
return PythonIcon; "HTML+PHP": HTMLIcon,
case "c#": "HTML+Razor": HTMLIcon,
return CSharpIcon; "Haskell": HaskellIcon,
case "html": "Html": HTMLIcon,
return HTMLIcon; "JSON with Comments": JSONIcon,
case "css": "JSON5": JSONIcon,
return CSSIcon; "JSONLD": JSONIcon,
case "java": "JSONiq": JSONIcon,
return JavaIcon; "Java": JavaIcon,
case "json with comments": "Java Properties": JavaIcon,
case "json": "Java Server Pages": JavaIcon,
return JSONIcon; "Java Template Engine": JavaIcon,
case "ruby": "JavaScript": JavaScriptIcon,
return RubyIcon; "JavaScript+ERB": JavaIcon,
case "rust": "Json": JSONIcon,
return RustIcon; "Julia": JuliaIcon,
case "yaml": "Kotlin": KotlinIcon,
return YAMLIcon; "Lua": LuaIcon,
case "kotlin": "MATLAB": MatlabIcon,
return KotlinIcon; "Markdown": MarkdownIcon,
case "swift": "OASv2-json": JSONIcon,
return SwiftIcon; "OASv2-yaml": YAMLIcon,
case "php": "OASv3-json": JSONIcon,
return PHPIcon; "OASv3-yaml": YAMLIcon,
case "r": "OCaml": OcamlIcon,
return RIcon; "Objective-C": ObjectiveCIcon,
case "matlab": "PHP": PHPIcon,
return MatlabIcon; "Pep8": PythonIcon,
case "objective-c": "Perl": PerlIcon,
return ObjectiveCIcon; "PowerShell": PowershellIcon,
case "lua": "Python": PythonIcon,
return LuaIcon; "Python console": PythonIcon,
case "dart": "Python traceback": PythonIcon,
return DartIcon; "R": RIcon,
case "haskell": "Ruby": RubyIcon,
return HaskellIcon; "Rust": RustIcon,
case "perl": "Shell": ShellIcon,
return PerlIcon; "Swift": SwiftIcon,
case "makefile": "Tex": TexIcon,
case "shell": "Text": TextIcon,
return ShellIcon; "Typescript": TypeScriptIcon,
case "zig": "YAML": YAMLIcon,
return ZigIcon; "Zig": ZigIcon
case "julia": };
return JuliaIcon; if (language in languageIconMap) {
case "ocaml": return languageIconMap[language as keyof typeof languageIconMap];
return OcamlIcon; } else {
case "text": return null;
return TextIcon;
case "powershell":
return PowershellIcon;
case "tex":
return TexIcon;
case "assembly":
return AssemblyIcon;
default:
return null;
} }
} }

View file

@ -0,0 +1 @@
export * from "./fileIcon";

View file

@ -683,6 +683,18 @@
resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3"
integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==
"@iconify/react@^5.1.0":
version "5.1.0"
resolved "https://registry.yarnpkg.com/@iconify/react/-/react-5.1.0.tgz#99fcfbb383dd8da84f6cf7b009faf7c71773631c"
integrity sha512-vj2wzalywy23DR37AnsogMPIkDa1nKEqITjxpH4z44tiLV869Mh7VyydD4/t0yJLEs9tsxlrPWtXvMOe1Lcd5g==
dependencies:
"@iconify/types" "^2.0.0"
"@iconify/types@^2.0.0":
version "2.0.0"
resolved "https://registry.yarnpkg.com/@iconify/types/-/types-2.0.0.tgz#ab0e9ea681d6c8a1214f30cd741fe3a20cc57f57"
integrity sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==
"@img/sharp-darwin-arm64@0.33.5": "@img/sharp-darwin-arm64@0.33.5":
version "0.33.5" version "0.33.5"
resolved "https://registry.yarnpkg.com/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz#ef5b5a07862805f1e8145a377c8ba6e98813ca08" resolved "https://registry.yarnpkg.com/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz#ef5b5a07862805f1e8145a377c8ba6e98813ca08"