diff --git a/packages/web/package.json b/packages/web/package.json
index 73c11753..88640d30 100644
--- a/packages/web/package.json
+++ b/packages/web/package.json
@@ -34,6 +34,7 @@
"@codemirror/state": "^6.4.1",
"@codemirror/view": "^6.33.0",
"@hookform/resolvers": "^3.9.0",
+ "@iconify/react": "^5.1.0",
"@radix-ui/react-dropdown-menu": "^2.1.1",
"@radix-ui/react-icons": "^1.3.0",
"@radix-ui/react-label": "^2.1.0",
diff --git a/packages/web/src/app/search/components/filterPanel/index.tsx b/packages/web/src/app/search/components/filterPanel/index.tsx
index 8a097b8e..41da0cce 100644
--- a/packages/web/src/app/search/components/filterPanel/index.tsx
+++ b/packages/web/src/app/search/components/filterPanel/index.tsx
@@ -5,9 +5,9 @@ import { cn, getRepoCodeHostInfo } from "@/lib/utils";
import { SetStateAction, useCallback, useEffect, useState } from "react";
import { Entry } from "./entry";
import { Filter } from "./filter";
-import { getLanguageIcon } from "./languageIcons";
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 {
matches: SearchResultFile[];
@@ -58,16 +58,9 @@ export const FilterPanel = ({
"Language",
matches,
(key) => {
- const iconSrc = getLanguageIcon(key);
- const Icon = iconSrc ? (
-
- ) : (
-
- );
+ const Icon = (
+
+ )
return {
key,
diff --git a/packages/web/src/components/ui/fileIcon/fileIcon.tsx b/packages/web/src/components/ui/fileIcon/fileIcon.tsx
new file mode 100644
index 00000000..b6f70ef7
--- /dev/null
+++ b/packages/web/src/components/ui/fileIcon/fileIcon.tsx
@@ -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 (
+
+ )
+ } else if (iconifyName) {
+ return (
+
+ )
+ } else {
+ return (
+
+ )
+ }
+};
diff --git a/packages/web/src/components/ui/fileIcon/fileIconIconify.ts b/packages/web/src/components/ui/fileIcon/fileIconIconify.ts
new file mode 100644
index 00000000..f24b7830
--- /dev/null
+++ b/packages/web/src/components/ui/fileIcon/fileIconIconify.ts
@@ -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;
+ }
+};
diff --git a/packages/web/src/app/search/components/filterPanel/languageIcons.ts b/packages/web/src/components/ui/fileIcon/fileIconSvg.ts
similarity index 51%
rename from packages/web/src/app/search/components/filterPanel/languageIcons.ts
rename to packages/web/src/components/ui/fileIcon/fileIconSvg.ts
index c9e2156f..2cfeb074 100644
--- a/packages/web/src/app/search/components/filterPanel/languageIcons.ts
+++ b/packages/web/src/components/ui/fileIcon/fileIconSvg.ts
@@ -32,79 +32,70 @@ import PowershellIcon from "@/public/languages/file_type_powershell.svg";
import TexIcon from "@/public/languages/file_type_tex.svg";
import AssemblyIcon from "@/public/languages/file_type_assembly.svg";
-export const getLanguageIcon = (language: string) => {
- switch (language.toLowerCase()) {
- case "tsx":
- case "typescript":
- return TypeScriptIcon;
- case "jsx":
- case "javascript":
- return JavaScriptIcon;
- case "go":
- return GoIcon;
- case "markdown":
- return MarkdownIcon;
- case "c":
- return CIcon;
- case "c++":
- return CppIcon;
- case "python":
- return PythonIcon;
- case "c#":
- return CSharpIcon;
- case "html":
- return HTMLIcon;
- case "css":
- return CSSIcon;
- case "java":
- return JavaIcon;
- case "json with comments":
- case "json":
- return JSONIcon;
- case "ruby":
- return RubyIcon;
- case "rust":
- return RustIcon;
- case "yaml":
- return YAMLIcon;
- case "kotlin":
- return KotlinIcon;
- case "swift":
- return SwiftIcon;
- case "php":
- return PHPIcon;
- case "r":
- return RIcon;
- case "matlab":
- return MatlabIcon;
- case "objective-c":
- return ObjectiveCIcon;
- case "lua":
- return LuaIcon;
- case "dart":
- return DartIcon;
- case "haskell":
- return HaskellIcon;
- case "perl":
- return PerlIcon;
- case "makefile":
- case "shell":
- return ShellIcon;
- case "zig":
- return ZigIcon;
- case "julia":
- return JuliaIcon;
- case "ocaml":
- return OcamlIcon;
- case "text":
- return TextIcon;
- case "powershell":
- return PowershellIcon;
- case "tex":
- return TexIcon;
- case "assembly":
- return AssemblyIcon;
- default:
- return null;
+/**
+ * Get the SVG icon for a linguist language
+ * https://github.com/github-linguist/linguist/blob/main/lib/linguist/languages.yml
+ */
+export const getFileIconSvg = (language: string): any | null => {
+ const languageIconMap: { [key: string]: any } = {
+ "Assembly": AssemblyIcon,
+ "C": CIcon,
+ "C#": CSharpIcon,
+ "C++": CppIcon,
+ "CSS": CSSIcon,
+ "Dart": DartIcon,
+ "GN": PythonIcon,
+ "Go": GoIcon,
+ "HTML+ECR": HTMLIcon,
+ "HTML+EEX": HTMLIcon,
+ "HTML+ERB": HTMLIcon,
+ "HTML+PHP": HTMLIcon,
+ "HTML+Razor": HTMLIcon,
+ "Haskell": HaskellIcon,
+ "Html": HTMLIcon,
+ "JSON with Comments": JSONIcon,
+ "JSON5": JSONIcon,
+ "JSONLD": JSONIcon,
+ "JSONiq": JSONIcon,
+ "Java": JavaIcon,
+ "Java Properties": JavaIcon,
+ "Java Server Pages": JavaIcon,
+ "Java Template Engine": JavaIcon,
+ "JavaScript": JavaScriptIcon,
+ "JavaScript+ERB": JavaIcon,
+ "Json": JSONIcon,
+ "Julia": JuliaIcon,
+ "Kotlin": KotlinIcon,
+ "Lua": LuaIcon,
+ "MATLAB": MatlabIcon,
+ "Markdown": MarkdownIcon,
+ "OASv2-json": JSONIcon,
+ "OASv2-yaml": YAMLIcon,
+ "OASv3-json": JSONIcon,
+ "OASv3-yaml": YAMLIcon,
+ "OCaml": OcamlIcon,
+ "Objective-C": ObjectiveCIcon,
+ "PHP": PHPIcon,
+ "Pep8": PythonIcon,
+ "Perl": PerlIcon,
+ "PowerShell": PowershellIcon,
+ "Python": PythonIcon,
+ "Python console": PythonIcon,
+ "Python traceback": PythonIcon,
+ "R": RIcon,
+ "Ruby": RubyIcon,
+ "Rust": RustIcon,
+ "Shell": ShellIcon,
+ "Swift": SwiftIcon,
+ "Tex": TexIcon,
+ "Text": TextIcon,
+ "Typescript": TypeScriptIcon,
+ "YAML": YAMLIcon,
+ "Zig": ZigIcon
+ };
+ if (language in languageIconMap) {
+ return languageIconMap[language as keyof typeof languageIconMap];
+ } else {
+ return null;
}
}
diff --git a/packages/web/src/components/ui/fileIcon/index.ts b/packages/web/src/components/ui/fileIcon/index.ts
new file mode 100644
index 00000000..7c4dd201
--- /dev/null
+++ b/packages/web/src/components/ui/fileIcon/index.ts
@@ -0,0 +1 @@
+export * from "./fileIcon";
diff --git a/yarn.lock b/yarn.lock
index 597e7221..2d135b69 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -683,6 +683,18 @@
resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3"
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":
version "0.33.5"
resolved "https://registry.yarnpkg.com/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz#ef5b5a07862805f1e8145a377c8ba6e98813ca08"