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 ? ( - {key} - ) : ( - - ); + 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 ( + {language} + ) + } 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"