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.4 kB 42 lines
1<script lang="ts"> 2 import ColorBall from "$lib/components/ui/ColorBall.svelte"; 3 import { LANGUAGE_COLORS, LANGUAGE_COLOR_FALLBACK } from "./language-colors"; 4 import type { LanguageSlice } from "./types"; 5 6 interface Props { 7 languages: LanguageSlice[]; 8 } 9 10 let { languages }: Props = $props(); 11 12 const colorFor = (name: string) => LANGUAGE_COLORS[name] ?? LANGUAGE_COLOR_FALLBACK; 13 const percent = (language: LanguageSlice) => 14 language.share < 1 ? "<1" : String(language.percentage); 15 const label = (language: LanguageSlice) => `${language.name} ${percent(language)}%`; 16</script> 17 18<details class="group -mx-6 -mt-4 mb-4"> 19 <summary 20 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" 21 > 22 {#each languages as language (language.name)} 23 <div 24 title={label(language)} 25 style={`background-color: ${colorFor(language.name)}; flex: ${language.share} 0 0px`} 26 ></div> 27 {/each} 28 </summary> 29 <div 30 class="flex flex-wrap items-center justify-center gap-4 border-b border-border-default px-4 py-2" 31 > 32 {#each languages as language (language.name)} 33 <div class="flex items-center gap-2 typography-paragraph-small"> 34 <ColorBall color={colorFor(language.name)} class="size-2.5" /> 35 <span> 36 {language.name} 37 <span class="text-foreground-subtle">{percent(language)}%</span> 38 </span> 39 </div> 40 {/each} 41 </div> 42</details>