add: (wip) new filtering layout

DropDown component, ToggleButton component,
This commit is contained in:
Fiona Lena Urban 2025-05-13 20:43:15 +02:00
parent 38cd37cf74
commit 3fd26b4e66
11 changed files with 203 additions and 42 deletions

View file

@ -0,0 +1,45 @@
<template>
<div
class="DropDown"
:class="{ active }"
ref="dropdown"
>
<button @click="active = !active">
<span>{{ current.label }}</span>
<Icon class="icon" name="uil:angle-down" mode="svg" />
</button>
<ul>
<li
v-for="element in elements"
@click="click(element)"
:class="{ selected : element.value === current.value }"
>
{{ element.label }}
</li>
</ul>
</div>
</template>
<script setup lang="ts">
import type { DropDownElement } from '../../../../shared/DropDown'
type Props = {
elements : DropDownElement[]
current : DropDownElement
}
const { elements = [] } = defineProps<Props>()
const emit = defineEmits(['click'])
const active = ref(false)
const dropdown = useTemplateRef<HTMLDivElement>('dropdown')
const click = (element : DropDownElement) => {
emit('click', element)
active.value = false
}
onMounted(() => {
onClickOutside(dropdown, () => active.value = false)
})
</script>

View file

@ -0,0 +1,21 @@
<template>
<button class="ToggleButton" @click="click">
<Icon class="icon" :name="icons[current]!" mode="svg" />
</button>
</template>
<script setup lang="ts">
type Props = {
icons : string[]
current: number
}
defineProps<Props>()
const emit = defineEmits(['click'])
const click = () => emit('click')
</script>
<style scoped>
</style>