This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

core / web / src / lib / components / repo / LanguageBar.svelte
1.5 kB 44 lines
1<script lang="ts"> 2 import { LANGUAGE_COLORS, LANGUAGE_COLOR_FALLBACK } from "./language-colors"; 3 import type { LanguageSlice } from "./types"; 4 5 interface Props { 6 languages: LanguageSlice[]; 7 } 8 9 let { languages }: Props = $props(); 10 11 const colorFor = (name: string) => LANGUAGE_COLORS[name] ?? LANGUAGE_COLOR_FALLBACK; 12 const percent = (language: LanguageSlice) => 13 language.share < 1 ? "<1" : String(language.percentage); 14 const label = (language: LanguageSlice) => `${language.name} ${percent(language)}%`; 15</script> 16 17<details class="group -mx-6 -mt-4 mb-4"> 18 <summary 19 class="flex h-4 origin-top scale-y-50 cursor-pointer gap-px overflow-hidden rounded-t transition-transform group-open:scale-y-100 hover:scale-y-100" 20 > 21 {#each languages as language (language.name)} 22 <div 23 title={label(language)} 24 style={`background-color: ${colorFor(language.name)}; flex: ${language.share} 0 0px`} 25 ></div> 26 {/each} 27 </summary> 28 <div 29 class="flex flex-wrap items-center justify-center gap-4 border-b border-border-default px-4 py-2" 30 > 31 {#each languages as language (language.name)} 32 <div class="flex items-center gap-2 typography-paragraph-small"> 33 <span 34 class="inline-block size-2.5 shrink-0 rounded-full" 35 style={`background-color: ${colorFor(language.name)}`} 36 ></span> 37 <span> 38 {language.name} 39 <span class="text-foreground-subtle">{percent(language)}%</span> 40 </span> 41 </div> 42 {/each} 43 </div> 44</details>