codecheck
90 строк · 2.0 Кб
1<script setup lang="ts">
2type Lang = {
3id: number;
4name: string;
5status?: boolean;
6};
7
8interface Props {
9languages: Lang[];
10}
11const props = defineProps<Props>();
12
13const selectedLanguage = ref(props.languages[0]);
14
15// provide("selectedLanguage", selectedLanguage.value);
16const emit = defineEmits(["selectedLanguage"]);
17
18const selectLang = (item: any) => {
19selectedLanguage.value = item;
20emit("selectedLanguage", selectedLanguage.value);
21};
22</script>
23
24<template>
25<div class="languages">
26<div class="languages__list">
27<button
28@click="selectLang(item)"
29class="languages__item"
30:class="{ languages_active: selectedLanguage === item }"
31v-for="item in props.languages"
32:key="item.id"
33>
34<span v-if="item.status">
35<svg
36xmlns="http://www.w3.org/2000/svg"
37x="0px"
38y="0px"
39width="1rem"
40height="1rem"
41viewBox="0 0 16 16"
42>
43<polygon
44fill="#00b569"
45points="5.857,14.844 0.172,9.032 3.031,6.235 5.888,9.156 12.984,2.06 15.812,4.888"
46></polygon>
47</svg>
48</span>
49<img
50class="languages__img"
51:src="`/langs/${item.name?.toLowerCase()}.svg`"
52:alt="item.name"
53/>
54<span class="languages__name"> {{ item.name }}</span>
55</button>
56</div>
57</div>
58</template>
59
60<style scoped lang="scss">
61.languages {
62&__list {
63list-style: none;
64display: flex;
65gap: 0.2rem;
66}
67&__img {
68width: 1rem;
69height: 1rem;
70}
71&__item {
72display: flex;
73align-items: center;
74gap: 0.3rem;
75font-size: 0.8rem;
76border-radius: var(--border-radius);
77border: 1px solid var(--color-border-primary);
78padding: 0.5rem;
79background: var(--color-bg-primary);
80color: var(--color-text-primary);
81&:hover {
82border: 1px solid var(--color-bg-secondary);
83}
84&.languages_active {
85background: var(--color-bg-secondary);
86color: var(--color-text-secondary);
87}
88}
89}
90</style>
91