From c2db0cbacb5620a160959dd49c3f0e1dae6dae99 Mon Sep 17 00:00:00 2001 From: dawn <90008@gaze.systems> Date: Wed, 20 May 2026 17:34:09 +0000 Subject: [PATCH] fix language bar details and colors --- src/index.css | 7 ++++++- src/lib/language-colors.ts | 759 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/lib/repo-utils.ts | 27 ++++++--------------------- src/pages/repo/code.tsx | 147 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------------------- 4 file(s) changed, 830 insertion(s)(+), 110 deletion(s)(-) diff --git a/src/index.css b/src/index.css --- a/src/index.css +++ b/src/index.css @@ -774,12 +774,13 @@ .untangled-language-bar { display: flex; + gap: 1px; height: 1rem; overflow: hidden; + padding: 0; border-radius: 0.25rem 0.25rem 0 0; transform: scaleY(0.5); transform-origin: top; - margin-bottom: -0.5rem; transition: transform 150ms; cursor: pointer; list-style: none; @@ -787,6 +788,10 @@ .untangled-language-bar::-webkit-details-marker { display: none; +} + +.untangled-language-bar::marker { + content: ''; } .untangled-language-bar:hover, diff --git a/src/lib/language-colors.ts b/src/lib/language-colors.ts new file mode 100644 --- /dev/null +++ b/src/lib/language-colors.ts @@ -0,0 +1,759 @@ +// Generated from github.com/go-enry/go-enry/v2 v2.9.6 data/colors.go and data/groups.go. +// Source linguist commit: 537297cdae3ab05f8d5dd1c03627a5bd73707b19. + +export const ENRY_LANGUAGE_COLOR_FALLBACK = '#cccccc'; + +export const ENRY_LANGUAGE_COLORS: Record = { + '1c enterprise': '#814CCC', + '2-dimensional array': '#38761D', + '4d': '#004289', + 'abap': '#E8274B', + 'abap cds': '#555e25', + 'ags script': '#B9D9FF', + 'aidl': '#34EB6B', + 'al': '#3AA2B5', + 'algol': '#D1E0DB', + 'ampl': '#E6EFBB', + 'antlr': '#9DC3FF', + 'api blueprint': '#2ACCA8', + 'apl': '#5A8164', + 'asp.net': '#9400ff', + 'ats': '#1ac620', + 'actionscript': '#882B0F', + 'ada': '#02f88c', + 'adblock filter list': '#800000', + 'adobe font metrics': '#fa0f00', + 'agda': '#315665', + 'aiken': '#640ff8', + 'alloy': '#64C800', + 'alpine abuild': '#0D597F', + 'altium designer': '#A89663', + 'angelscript': '#C7D7DC', + 'answer set programming': '#A9CC29', + 'ant build system': '#A9157E', + 'antlers': '#ff269e', + 'apacheconf': '#d12127', + 'apex': '#1797c0', + 'apollo guidance computer': '#0B3D91', + 'applescript': '#101F1F', + 'arc': '#aa2afe', + 'asciidoc': '#73a0c5', + 'aspectj': '#a957b0', + 'assembly': '#6E4C13', + 'astro': '#ff5a03', + 'asymptote': '#ff0000', + 'augeas': '#9CC134', + 'autohotkey': '#6594b9', + 'autoit': '#1C3552', + 'avro idl': '#0040FF', + 'awk': '#c30e9b', + 'b (formal method)': '#8aa8c5', + 'b4x': '#00e4ff', + 'basic': '#ff0000', + 'bqn': '#2b7067', + 'ballerina': '#FF5000', + 'batchfile': '#C1F12E', + 'beef': '#a52f4e', + 'berry': '#15A13C', + 'bibtex': '#778899', + 'bicep': '#519aba', + 'bikeshed': '#5562ac', + 'bison': '#6A463F', + 'bitbake': '#00bce4', + 'blade': '#f7523f', + 'blitzbasic': '#00FFAE', + 'blitzmax': '#cd6400', + 'bluespec': '#12223c', + 'bluespec bh': '#12223c', + 'boo': '#d4bec1', + 'boogie': '#c80fa0', + 'brainfuck': '#2F2530', + 'brighterscript': '#66AABB', + 'brightscript': '#662D91', + 'browserslist': '#ffd539', + 'bru': '#F4AA41', + 'buildstream': '#006bff', + 'c': '#555555', + 'c#': '#178600', + 'c++': '#f34b7d', + 'c3': '#2563eb', + 'cap cds': '#0092d1', + 'clips': '#00A300', + 'cmake': '#DA3434', + 'collada': '#F1A42B', + 'cql': '#006091', + 'cson': '#244776', + 'css': '#663399', + 'csv': '#237346', + 'cue': '#5886E1', + 'cweb': '#00007a', + 'cabal config': '#483465', + 'caddyfile': '#22b638', + 'cadence': '#00ef8b', + 'cairo': '#ff4a48', + 'cairo zero': '#ff4a48', + 'cameligo': '#3be133', + 'cangjie': '#00868B', + 'cap\'n proto': '#c42727', + 'carbon': '#222222', + 'ceylon': '#dfa535', + 'chapel': '#8dc63f', + 'chuck': '#3f8000', + 'circom': '#707575', + 'cirru': '#ccccff', + 'clarion': '#db901e', + 'clarity': '#5546ff', + 'classic asp': '#6a40fd', + 'clean': '#3F85AF', + 'click': '#E4E6F3', + 'clojure': '#db5855', + 'closure templates': '#0d948f', + 'cloud firestore security rules': '#FFA000', + 'clue': '#0009b5', + 'codeql': '#140f46', + 'coffeescript': '#244776', + 'coldfusion': '#ed2cd6', + 'coldfusion cfc': '#ed2cd6', + 'common lisp': '#3fb68b', + 'common workflow language': '#B5314C', + 'component pascal': '#B0CE4E', + 'cooklang': '#E15A29', + 'crystal': '#000100', + 'csound': '#1a1a1a', + 'csound document': '#1a1a1a', + 'csound score': '#1a1a1a', + 'cuda': '#3A4E3A', + 'curry': '#531242', + 'cylc': '#00b3fd', + 'cypher': '#34c0eb', + 'cython': '#fedf5b', + 'd': '#ba595e', + 'd2': '#526ee8', + 'dm': '#447265', + 'dafny': '#FFEC25', + 'darcs patch': '#8eff23', + 'dart': '#00B4AB', + 'daslang': '#d3d3d3', + 'dataweave': '#003a52', + 'debian package control file': '#D70751', + 'denizenscript': '#FBEE96', + 'dhall': '#dfafff', + 'directx 3d file': '#aace60', + 'dockerfile': '#384d54', + 'dogescript': '#cca760', + 'dotenv': '#e5d559', + 'dune': '#89421e', + 'dylan': '#6c616e', + 'e': '#ccce35', + 'ecl': '#8a1267', + 'eclipse': '#001d9d', + 'ejs': '#a91e50', + 'eq': '#a78649', + 'earthly': '#2af0ff', + 'easybuild': '#069406', + 'ecere projects': '#913960', + 'ecmarkup': '#eb8131', + 'edge': '#0dffe0', + 'edgeql': '#31A7FF', + 'editorconfig': '#fff1f2', + 'eiffel': '#4d6977', + 'elixir': '#6e4a7e', + 'elm': '#60B5CC', + 'elvish': '#55BB55', + 'elvish transcript': '#55BB55', + 'emacs lisp': '#c065db', + 'emberscript': '#FFF4F3', + 'erlang': '#B83998', + 'euphoria': '#FF790B', + 'f#': '#b845fc', + 'f*': '#572e30', + 'figlet font': '#FFDDBB', + 'firrtl': '#2f632f', + 'flux': '#88ccff', + 'factor': '#636746', + 'fancy': '#7b9db4', + 'fantom': '#14253c', + 'faust': '#c37240', + 'fennel': '#fff3d7', + 'filebench wml': '#F6B900', + 'flatbuffers': '#ed284a', + 'flix': '#d44a45', + 'fluent': '#ffcc33', + 'forth': '#341708', + 'fortran': '#4d41b1', + 'fortran free form': '#4d41b1', + 'freebasic': '#141AC9', + 'freemarker': '#0050b2', + 'frege': '#00cafe', + 'futhark': '#5f021f', + 'g-code': '#D08CF2', + 'gaml': '#FFC766', + 'gams': '#f49a22', + 'gap': '#0000cc', + 'gcc machine description': '#FFCFAB', + 'gdscript': '#355570', + 'gdshader': '#478CBF', + 'gedcom': '#003058', + 'glsl': '#5686a5', + 'gsc': '#FF6800', + 'game maker language': '#71b417', + 'gemfile.lock': '#701516', + 'gemini': '#ff6900', + 'genero 4gl': '#63408e', + 'genero per': '#d8df39', + 'genie': '#fb855d', + 'genshi': '#951531', + 'gentoo ebuild': '#9400ff', + 'gentoo eclass': '#9400ff', + 'gerber image': '#d20b00', + 'gherkin': '#5B2063', + 'git attributes': '#F44D27', + 'git commit': '#F44D27', + 'git config': '#F44D27', + 'git revision list': '#F44D27', + 'gleam': '#ffaff3', + 'glimmer js': '#F5835F', + 'glimmer ts': '#3178c6', + 'glyph': '#c1ac7f', + 'gnuplot': '#f0a9f0', + 'go': '#00ADD8', + 'go checksums': '#00ADD8', + 'go module': '#00ADD8', + 'go template': '#00ADD8', + 'go workspace': '#00ADD8', + 'godot resource': '#355570', + 'golo': '#88562A', + 'gosu': '#82937f', + 'grace': '#615f8b', + 'gradle': '#02303a', + 'gradle kotlin dsl': '#02303a', + 'grammatical framework': '#ff0000', + 'graphql': '#e10098', + 'graphviz (dot)': '#2596be', + 'groovy': '#4298b8', + 'groovy server pages': '#4298b8', + 'haproxy': '#106da9', + 'hcl': '#844FBA', + 'hip': '#4F3A4F', + 'hlsl': '#aace60', + 'hocon': '#9ff8ee', + 'html': '#e34c26', + 'html+ecr': '#2e1052', + 'html+eex': '#6e4a7e', + 'html+erb': '#701516', + 'html+php': '#4f5d95', + 'html+razor': '#512be4', + 'http': '#005C9C', + 'hxml': '#f68712', + 'hack': '#878787', + 'haml': '#ece2a9', + 'handlebars': '#f7931e', + 'harbour': '#0e60e3', + 'hare': '#9d7424', + 'haskell': '#5e5086', + 'haxe': '#df7900', + 'hiveql': '#dce200', + 'holyc': '#ffefaf', + 'hosts file': '#308888', + 'hurl': '#FF0288', + 'hy': '#7790B2', + 'idl': '#a3522f', + 'igor pro': '#0000cc', + 'ini': '#d1dbe0', + 'ispc': '#2D68B1', + 'idris': '#b30000', + 'ignore list': '#000000', + 'imagej macro': '#99AAFF', + 'imba': '#16cec6', + 'inno setup': '#264b99', + 'io': '#a9188d', + 'ioke': '#078193', + 'isabelle': '#FEFE00', + 'isabelle root': '#FEFE00', + 'j': '#9EEDFF', + 'jar manifest': '#b07219', + 'jcl': '#d90e09', + 'jflex': '#DBCA00', + 'json': '#292929', + 'json with comments': '#292929', + 'json5': '#267CB9', + 'jsonld': '#0c479c', + 'jsoniq': '#40d47e', + 'jac': '#FC792D', + 'jai': '#ab8b4b', + 'janet': '#0886a5', + 'jasmin': '#d03600', + 'java': '#b07219', + 'java properties': '#2A6277', + 'java server pages': '#2A6277', + 'java template engine': '#2A6277', + 'javascript': '#f1e05a', + 'javascript+erb': '#f1e05a', + 'jest snapshot': '#15c213', + 'jetbrains mps': '#21D789', + 'jinja': '#a52a22', + 'jison': '#56b3cb', + 'jison lex': '#56b3cb', + 'jolie': '#843179', + 'jsonnet': '#0064bd', + 'julia': '#a270ba', + 'julia repl': '#a270ba', + 'jupyter notebook': '#DA5B0B', + 'just': '#384d54', + 'kcl': '#7ABABF', + 'kdl': '#ffb3b3', + 'kframework': '#4195c5', + 'krl': '#28430A', + 'kaitai struct': '#773b37', + 'kakounescript': '#6f8042', + 'kerboscript': '#41adf0', + 'kicad layout': '#2f4aab', + 'kicad legacy layout': '#2f4aab', + 'kicad schematic': '#2f4aab', + 'kolmafia ash': '#B9D9B9', + 'koka': '#215166', + 'kotlin': '#A97BFF', + 'lfe': '#4C3023', + 'llvm': '#185619', + 'lolcode': '#cc9900', + 'lsl': '#3d9970', + 'labview': '#fede06', + 'lambdapi': '#8027a3', + 'langium': '#2c8c87', + 'lark': '#2980B9', + 'lasso': '#999999', + 'latte': '#f2a542', + 'leo': '#C4FFC2', + 'less': '#1d365d', + 'lex': '#DBCA00', + 'ligolang': '#0e74ff', + 'lilypond': '#9ccc7c', + 'liquid': '#67b8de', + 'liquidsoap': '#990066', + 'literate agda': '#315665', + 'literate coffeescript': '#244776', + 'literate haskell': '#5e5086', + 'livecode script': '#0c5ba5', + 'livescript': '#499886', + 'logtalk': '#295b9a', + 'lookml': '#652B81', + 'lua': '#000080', + 'luau': '#00A2FF', + 'm3u': '#179C7D', + 'matlab': '#e16737', + 'maxscript': '#00a6a6', + 'mdx': '#fcb32c', + 'mlir': '#5EC8DB', + 'mql4': '#62A8D6', + 'mql5': '#4A76B8', + 'mtml': '#b7e1f4', + 'macaulay2': '#d8ffff', + 'makefile': '#427819', + 'mako': '#7e858d', + 'markdown': '#083fa1', + 'marko': '#42bff2', + 'mask': '#f97732', + 'mathematical programming system': '#0530ad', + 'max': '#c4a79c', + 'metta': '#6a5acd', + 'mercury': '#ff2b2b', + 'mermaid': '#ff3670', + 'meson': '#007800', + 'metal': '#8f14e9', + 'miniyaml': '#ff1111', + 'minizinc': '#06a9e6', + 'mint': '#02b046', + 'mirah': '#c7a938', + 'modelica': '#de1d31', + 'modula-2': '#10253f', + 'modula-3': '#223388', + 'mojo': '#ff4c1f', + 'monkey c': '#8D6747', + 'moonbit': '#b92381', + 'moonscript': '#ff4585', + 'motoko': '#fbb03b', + 'motorola 68k assembly': '#005daa', + 'move': '#4a137a', + 'mustache': '#724b3b', + 'ncl': '#28431f', + 'nmodl': '#00356B', + 'npm config': '#cb3837', + 'nwscript': '#111522', + 'nasal': '#1d2c4e', + 'nearley': '#990000', + 'nemerle': '#3d3c6e', + 'netlinx': '#0aa0ff', + 'netlinx+erb': '#747faa', + 'netlogo': '#ff6375', + 'newlisp': '#87AED7', + 'nextflow': '#3ac486', + 'nginx': '#009639', + 'nickel': '#E0C3FC', + 'nim': '#ffc200', + 'nit': '#009917', + 'nix': '#7e7eff', + 'noir': '#2f1f49', + 'nu': '#c9df40', + 'numpy': '#9C8AF9', + 'nunjucks': '#3d8137', + 'nushell': '#4E9906', + 'oasv2-json': '#85ea2d', + 'oasv2-yaml': '#85ea2d', + 'oasv3-json': '#85ea2d', + 'oasv3-yaml': '#85ea2d', + 'ocaml': '#ef7a08', + 'omnet++ msg': '#a0e0a0', + 'omnet++ ned': '#08607c', + 'objectscript': '#424893', + 'objective-c': '#438eff', + 'objective-c++': '#6866fb', + 'objective-j': '#ff0c5a', + 'odin': '#60AFFE', + 'omgrofl': '#cabbff', + 'opal': '#f7ede0', + 'open policy agent': '#7d9199', + 'openapi specification v2': '#85ea2d', + 'openapi specification v3': '#85ea2d', + 'opencl': '#ed2e2d', + 'openedge abl': '#5ce600', + 'openqasm': '#AA70FF', + 'openscad': '#e5cd45', + 'option list': '#476732', + 'org': '#77aa99', + 'overpassql': '#cce2aa', + 'oxygene': '#cdd0e3', + 'oz': '#fab738', + 'p4': '#7055b5', + 'pddl': '#0d00ff', + 'peg.js': '#234d6b', + 'php': '#4F5D95', + 'plsql': '#dad8d8', + 'plpgsql': '#336790', + 'pov-ray sdl': '#6bac65', + 'pact': '#F7A8B8', + 'pan': '#cc0000', + 'papyrus': '#6600cc', + 'parrot': '#f3ca0a', + 'pascal': '#E3F171', + 'pawn': '#dbb284', + 'pep8': '#C76F5B', + 'perl': '#0298c3', + 'picolisp': '#6067af', + 'piglatin': '#fcd7de', + 'pike': '#005390', + 'pip requirements': '#FFD343', + 'pkl': '#6b9543', + 'plantuml': '#fbbd16', + 'pogoscript': '#d80074', + 'polar': '#ae81ff', + 'portugol': '#f8bd00', + 'postcss': '#dc3a0c', + 'postscript': '#da291c', + 'powerbuilder': '#8f0f8d', + 'powershell': '#012456', + 'praat': '#c8506d', + 'prisma': '#0c344b', + 'processing': '#0096D8', + 'procfile': '#3B2F63', + 'prolog': '#74283c', + 'promela': '#de0000', + 'propeller spin': '#7fa2a7', + 'pug': '#a86454', + 'puppet': '#302B6D', + 'purebasic': '#5a6986', + 'purescript': '#1D222D', + 'pyret': '#ee1e10', + 'python': '#3572A5', + 'python console': '#3572A5', + 'python traceback': '#3572A5', + 'q#': '#fed659', + 'qml': '#44a51c', + 'qt script': '#00b841', + 'quake': '#882233', + 'quakec': '#975777', + 'quickbasic': '#008080', + 'r': '#198CE7', + 'raml': '#77d9fb', + 'rascript': '#2C97FA', + 'rbs': '#701516', + 'rdoc': '#701516', + 'rexx': '#d90e09', + 'rmarkdown': '#198ce7', + 'ron': '#a62c00', + 'ros interface': '#22314e', + 'rpgle': '#2BDE21', + 'runoff': '#665a4e', + 'racket': '#3c5caa', + 'ragel': '#9d5200', + 'raku': '#0000fb', + 'rascal': '#fffaa0', + 'rescript': '#ed5051', + 'reason': '#ff5847', + 'reasonligo': '#ff5847', + 'rebol': '#358a5b', + 'record jar': '#0673ba', + 'red': '#f50000', + 'regular expression': '#009a00', + 'ren\'py': '#ff7f7f', + 'rez': '#FFDAB3', + 'ring': '#2D54CB', + 'riot': '#A71E49', + 'robotframework': '#00c0b5', + 'roc': '#7c38f5', + 'rocq prover': '#d0b68c', + 'roff': '#ecdebe', + 'roff manpage': '#ecdebe', + 'rouge': '#cc0088', + 'routeros script': '#DE3941', + 'ruby': '#701516', + 'rust': '#dea584', + 'sas': '#B34936', + 'scss': '#c6538c', + 'sparql': '#0C4597', + 'sqf': '#3F3F3F', + 'sql': '#e38c00', + 'sqlpl': '#e38c00', + 'srecode template': '#348a34', + 'stl': '#373b5e', + 'svg': '#ff9900', + 'sail': '#259dd5', + 'saltstack': '#646464', + 'sass': '#a53b70', + 'scala': '#c22d40', + 'scaml': '#bd181a', + 'scenic': '#fdc700', + 'scheme': '#1e4aec', + 'scilab': '#ca0f21', + 'self': '#0579aa', + 'shaderlab': '#222c37', + 'shell': '#89e051', + 'shellcheck config': '#cecfcb', + 'shen': '#120F14', + 'simple file verification': '#C9BFED', + 'singularity': '#64E6AD', + 'slang': '#1fbec9', + 'slash': '#007eff', + 'slice': '#003fa2', + 'slim': '#2b2b2b', + 'slint': '#2379F4', + 'smpl': '#c94949', + 'smalltalk': '#596706', + 'smarty': '#f0c040', + 'smithy': '#c44536', + 'snakemake': '#419179', + 'solidity': '#AA6746', + 'sourcepawn': '#f69e1d', + 'squirrel': '#800000', + 'stan': '#b2011d', + 'standard ml': '#dc566d', + 'starlark': '#76d275', + 'stata': '#1a5f91', + 'stringtemplate': '#3fb34f', + 'stylus': '#ff6347', + 'subrip text': '#9e0101', + 'sugarss': '#2fcc9f', + 'supercollider': '#46390b', + 'surrealql': '#ff00a0', + 'survex data': '#ffcc99', + 'svelte': '#ff3e00', + 'sway': '#00F58C', + 'sweave': '#198ce7', + 'swift': '#F05138', + 'systemverilog': '#DAE1C2', + 'ti program': '#A0AA87', + 'tl-verilog': '#C40023', + 'tla': '#4b0079', + 'tmdl': '#f0c913', + 'toml': '#9c4221', + 'tsql': '#e38c00', + 'tsv': '#237346', + 'tsx': '#3178c6', + 'txl': '#0178b8', + 'tact': '#48b5ff', + 'talon': '#333333', + 'tcl': '#e4cc98', + 'tex': '#3D6117', + 'teal': '#00B1BC', + 'terra': '#00004c', + 'terraform template': '#7b42bb', + 'textgrid': '#c8506d', + 'textmate properties': '#df66e4', + 'textile': '#ffe7ac', + 'thrift': '#D12127', + 'toit': '#c2c9fb', + 'tor config': '#59316b', + 'tree-sitter query': '#8ea64c', + 'turing': '#cf142b', + 'twig': '#c1d026', + 'typescript': '#3178c6', + 'typespec': '#4A3665', + 'typst': '#239dad', + 'unified parallel c': '#4e3617', + 'unity3d asset': '#222c37', + 'uno': '#9933cc', + 'unrealscript': '#a54c4d', + 'untyped plutus core': '#36adbd', + 'urweb': '#ccccee', + 'v': '#4f87c4', + 'vba': '#867db1', + 'vbscript': '#15dcdc', + 'vcl': '#148AA8', + 'vhdl': '#adb2cb', + 'vala': '#a56de2', + 'valve data format': '#f26025', + 'velocity template language': '#507cff', + 'vento': '#ff0080', + 'verilog': '#b2b7f8', + 'vim help file': '#199f4b', + 'vim script': '#199f4b', + 'vim snippet': '#199f4b', + 'visual basic .net': '#945db7', + 'visual basic 6.0': '#2c6353', + 'volt': '#1F1F1F', + 'vue': '#41b883', + 'vyper': '#9F4CF2', + 'wdl': '#42f1f4', + 'wgsl': '#1a5e9a', + 'web ontology language': '#5b70bd', + 'webassembly': '#04133b', + 'webassembly interface type': '#6250e7', + 'whiley': '#d5c397', + 'wikitext': '#fc5757', + 'windows registry entries': '#52d5ff', + 'witcher script': '#ff0000', + 'wolfram language': '#dd1100', + 'wollok': '#a23738', + 'world of warcraft addon data': '#f7e43f', + 'wren': '#383838', + 'x10': '#4B6BEF', + 'xc': '#99DA07', + 'xml': '#0060ac', + 'xml property list': '#0060ac', + 'xquery': '#5232e7', + 'xslt': '#EB8CEB', + 'xmake': '#22a079', + 'xojo': '#81bd41', + 'xonsh': '#285EEF', + 'xtend': '#24255d', + 'yaml': '#cb171e', + 'yara': '#220000', + 'yasnippet': '#32AB90', + 'yacc': '#4B6C4B', + 'yul': '#794932', + 'zap': '#0d665e', + 'zil': '#dc75e5', + 'zenscript': '#00BCD1', + 'zephir': '#118f9e', + 'zig': '#ec915c', + 'zimpl': '#d67711', + 'zmodel': '#ff7100', + 'crontab': '#ead7ac', + 'ec': '#913960', + 'fish': '#4aae47', + 'hoon': '#00b171', + 'icalendar': '#ec564c', + 'jq': '#c7254e', + 'kvlang': '#1da6e0', + 'mirc script': '#3d57c3', + 'mcfunction': '#E22837', + 'mdsvex': '#5f9ea0', + 'mupad': '#244963', + 'nanorc': '#2d004d', + 'nesc': '#94B0C7', + 'ooc': '#b0b77e', + 'q': '#0040cd', + 'restructuredtext': '#141414', + 'sed': '#64b970', + 'templ': '#66D0DD', + 'vcard': '#ee2647', + 'wisp': '#7582D1', + 'xbase': '#403a40', +}; + +export const ENRY_LANGUAGE_GROUPS: Record = { + 'alpine abuild': 'shell', + 'apollo guidance computer': 'assembly', + 'bibtex': 'tex', + 'bison': 'yacc', + 'bluespec bh': 'bluespec', + 'c2hs haskell': 'haskell', + 'cairo': 'cairo', + 'cairo zero': 'cairo', + 'cameligo': 'ligolang', + 'coldfusion cfc': 'coldfusion', + 'cylc': 'ini', + 'eclipse': 'prolog', + 'easybuild': 'python', + 'ecere projects': 'javascript', + 'ecmarkup': 'html', + 'editorconfig': 'ini', + 'elvish transcript': 'elvish', + 'filterscript': 'renderscript', + 'fortran': 'fortran', + 'fortran free form': 'fortran', + 'gentoo ebuild': 'shell', + 'gentoo eclass': 'shell', + 'git config': 'ini', + 'glimmer js': 'javascript', + 'glimmer ts': 'typescript', + 'gradle kotlin dsl': 'gradle', + 'groovy server pages': 'groovy', + 'html+ecr': 'html', + 'html+eex': 'html', + 'html+erb': 'html', + 'html+php': 'html', + 'html+razor': 'html', + 'isabelle root': 'isabelle', + 'jflex': 'lex', + 'json with comments': 'json', + 'java server pages': 'java', + 'java template engine': 'java', + 'javascript+erb': 'javascript', + 'jison': 'yacc', + 'jison lex': 'lex', + 'julia repl': 'julia', + 'lean 4': 'lean', + 'ligolang': 'ligolang', + 'literate agda': 'agda', + 'literate coffeescript': 'coffeescript', + 'literate haskell': 'haskell', + 'm4sugar': 'm4', + 'muf': 'forth', + 'maven pom': 'xml', + 'motorola 68k assembly': 'assembly', + 'npm config': 'ini', + 'numpy': 'python', + 'oasv2-json': 'openapi specification v2', + 'oasv2-yaml': 'openapi specification v2', + 'oasv3-json': 'openapi specification v3', + 'oasv3-yaml': 'openapi specification v3', + 'opencl': 'c', + 'openrc runscript': 'shell', + 'parrot assembly': 'parrot', + 'parrot internal representation': 'parrot', + 'pic': 'roff', + 'postcss': 'css', + 'python console': 'python', + 'python traceback': 'python', + 'rbs': 'ruby', + 'readline config': 'ini', + 'reasonligo': 'ligolang', + 'roff manpage': 'roff', + 'ssh config': 'ini', + 'ston': 'smalltalk', + 'simple file verification': 'checksums', + 'snakemake': 'python', + 'tsx': 'typescript', + 'tcsh': 'shell', + 'terraform template': 'hcl', + 'unified parallel c': 'c', + 'unix assembly': 'assembly', + 'wget config': 'ini', + 'x bitmap': 'c', + 'x pixmap': 'c', + 'xml property list': 'xml', + 'curl config': 'ini', + 'fish': 'shell', + 'nanorc': 'ini', +}; + diff --git a/src/lib/repo-utils.ts b/src/lib/repo-utils.ts --- a/src/lib/repo-utils.ts +++ b/src/lib/repo-utils.ts @@ -1,4 +1,5 @@ import type { IssueComment, PullComment, RepoContext, TreeEntry } from './api'; +import { ENRY_LANGUAGE_COLOR_FALLBACK, ENRY_LANGUAGE_COLORS, ENRY_LANGUAGE_GROUPS } from './language-colors'; const RECENT_REPOS_KEY = 'untangled.recentRepos'; @@ -174,7 +175,8 @@ export const countLines = (value: string): number => splitCodeLines(value).length; -export const formatLanguagePercent = (value: number): string => `${value.toFixed(1)}%`; +export const formatLanguagePercent = (value: number): string => + value > 0 && value < 0.05 ? '0.1%' : `${value.toFixed(1)}%`; export const loadRecentRepos = (): RecentRepo[] => { try { @@ -219,24 +221,7 @@ }; export const languageColor = (name: string): string => { - switch (name.toLowerCase()) { - case 'typescript': - return '#3178c6'; - case 'javascript': - return '#f1e05a'; - case 'rust': - return '#dea584'; - case 'go': - return '#00add8'; - case 'python': - return '#3572A5'; - case 'html': - return '#e34c26'; - case 'css': - return '#663399'; - case 'c': - return '#555555'; - default: - return '#94a3b8'; - } + const normalized = name.trim().toLowerCase(); + const group = ENRY_LANGUAGE_GROUPS[normalized]; + return ENRY_LANGUAGE_COLORS[normalized] ?? (group ? ENRY_LANGUAGE_COLORS[group] : undefined) ?? ENRY_LANGUAGE_COLOR_FALLBACK; }; diff --git a/src/pages/repo/code.tsx b/src/pages/repo/code.tsx --- a/src/pages/repo/code.tsx +++ b/src/pages/repo/code.tsx @@ -100,6 +100,57 @@ ); +const RepoLanguageBar: Component<{ + languages: Array<{ name: string; percentage: number; color?: string }>; +}> = (props) => ( + 0}> +
+ + + {(language) => { + const name = language.name || 'Other'; + const color = language.color || languageColor(name); + return ( +
+ ); + }} + +
+
+ + {(language) => { + const name = language.name || 'Other'; + const color = language.color || languageColor(name); + return ( +
+
+
+ {name}{' '} + + {formatLanguagePercent(language.percentage)} + +
+
+ ); + }} + +
+
+
+); + const LoadingFilePath: Component<{ repo: Parameters[0]; refName: string; @@ -205,47 +256,7 @@ return ( <>
- 0}> -
- - - {(language) => ( -
- )} - -
-
- - {(language) => { - const color = language.color || languageColor(language.name || 'Other'); - return ( -
-
-
- {language.name || 'Other'}{' '} - - {formatLanguagePercent(language.percentage)} - -
-
- ); - }} - -
-
-
+
@@ -556,50 +567,10 @@ return ( <> - 0}> -
- - - {(language) => ( -
- )} - -
-
- - {(language) => { - const color = language.color || languageColor(language.name || 'Other'); - return ( -
-
-
- {language.name || 'Other'}{' '} - - {formatLanguagePercent(language.percentage)} - -
-
- ); - }} - -
-
-
+
+ -
-
+