mirror of
https://github.com/amir20/dozzle.git
synced 2025-12-21 21:33:18 +01:00
* feat: moves to tailwindcss and better component library * update styles * creates toggle component * adds drop down component * cleans up components * removes unused components * uses tailwind for scroll view * removes table component * improves animation * cleans up more styles * uses more tailwind * cleans up more styles with flex * more styles * removes bulma * adds colors * updates modules * fixes bugs * stops importing styles.scss * more clean up * cleans up headers * cleans up title * fixes title * fixes mobile-hidden * fixes shadow * fixes colors * add tailwindcss/nesting * adds more colors * fixes more colors * updates colors * fixes colors * colors * fixes menu on left * menu and modal * menu and modal * fuzzy search * fixes menu on left * remove logs * cleans up search * adds host to search * remove outline from inputs * cleans up left search icon * removes unused styles * fixes docker * removes sass! * cleans up styles * Fixe smobile menu * fixes mobile menu * fixes typecheck * fixes seconday color * adds drop down for container * cleans header css * updates css * fixes other layouts * updates some tests * fixes border * fixes home screen font * fixes top header * fixes tests * fixes fieldlist * fixes complex * cleans up more * removes index * fixes tests * fixes tests * resolves conflicts
45 lines
1.3 KiB
Vue
45 lines
1.3 KiB
Vue
<template>
|
|
<details class="dropdown" ref="details" v-on-click-outside="close">
|
|
<summary class="btn btn-primary flex-nowrap font-normal" v-bind="$attrs">
|
|
<slot name="trigger"> {{ values[modelValue] ?? defaultLabel }} <carbon:caret-down /></slot>
|
|
</summary>
|
|
<ul class="menu dropdown-content rounded-box z-50 w-52 bg-base p-2 shadow">
|
|
<slot>
|
|
<li v-for="item in options">
|
|
<a @click="modelValue = item.value">
|
|
<mdi-light:check class="w-4" v-if="modelValue == item.value" />
|
|
<div v-else class="w-4"></div>
|
|
{{ item.label }}
|
|
</a>
|
|
</li>
|
|
</slot>
|
|
</ul>
|
|
</details>
|
|
</template>
|
|
|
|
<script lang="ts" setup>
|
|
import { vOnClickOutside } from "@vueuse/components";
|
|
type DropdownItem = {
|
|
label: string;
|
|
value: string;
|
|
};
|
|
const { options = [], defaultLabel = "" } = defineProps<{ options?: DropdownItem[]; defaultLabel?: string }>();
|
|
const { modelValue } = defineModels<{
|
|
modelValue: string;
|
|
}>();
|
|
|
|
const values = computed(() =>
|
|
options.reduce(
|
|
(acc, curr) => {
|
|
acc[curr.value] = curr.label;
|
|
return acc;
|
|
},
|
|
{} as Record<string, string>,
|
|
),
|
|
);
|
|
|
|
const details = ref<HTMLElement | null>(null);
|
|
const close = () => details.value?.removeAttribute("open");
|
|
watch(modelValue, () => close());
|
|
</script>
|