feat: add Dropdown component
This commit is contained in:
parent
7dcd80cdf7
commit
1e0b8e2ba1
2 changed files with 52 additions and 0 deletions
46
components/Dropdown.vue
Normal file
46
components/Dropdown.vue
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
<template>
|
||||||
|
<div class="dropdown">
|
||||||
|
<div v-for="option of props.options" class="dropdown-option">
|
||||||
|
<button class="button" :data-value="option.value" @click.prevent="option.callback">{{ option.name }}</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import type { DropdownOption } from '~/types/interfaces';
|
||||||
|
|
||||||
|
const props = defineProps<{ options: DropdownOption[] }>();
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
.dropdown {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 100;
|
||||||
|
left: 4dvw;
|
||||||
|
bottom: 2dvh;
|
||||||
|
background-color: var(--background-color);
|
||||||
|
width: 10dvw;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-option {
|
||||||
|
border: .09rem solid brown;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button {
|
||||||
|
padding-top: .5dvh;
|
||||||
|
padding-bottom: .5dvh;
|
||||||
|
color: var(--main-text-color);
|
||||||
|
background-color: transparent;
|
||||||
|
width: 100%;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button:hover {
|
||||||
|
background-color: rgb(70, 70, 70);
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
|
@ -81,3 +81,9 @@ export interface ScrollPosition {
|
||||||
offsetTop: number,
|
offsetTop: number,
|
||||||
offsetLeft: number
|
offsetLeft: number
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface DropdownOption {
|
||||||
|
name: string,
|
||||||
|
value: string | number,
|
||||||
|
callback: () => void
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue