mirror of
https://github.com/mealie-recipes/mealie.git
synced 2025-07-20 21:59:40 +02:00
57 lines
1.5 KiB
Vue
57 lines
1.5 KiB
Vue
|
<template>
|
||
|
<v-item-group>
|
||
|
<template v-for="btn in buttons">
|
||
|
<v-menu v-if="btn.children" :key="'menu-' + btn.event" active-class="pa-0" offset-x left>
|
||
|
<template #activator="{ on, attrs }">
|
||
|
<v-btn tile large icon v-bind="attrs" v-on="on">
|
||
|
<v-icon>
|
||
|
{{ btn.icon }}
|
||
|
</v-icon>
|
||
|
</v-btn>
|
||
|
</template>
|
||
|
<v-list dense>
|
||
|
<v-list-item v-for="(child, idx) in btn.children" :key="idx" dense @click="$emit(child.event)">
|
||
|
<v-list-item-title>{{ child.text }}</v-list-item-title>
|
||
|
</v-list-item>
|
||
|
</v-list>
|
||
|
</v-menu>
|
||
|
<v-tooltip
|
||
|
v-else
|
||
|
:key="'btn-' + btn.event"
|
||
|
open-delay="200"
|
||
|
transition="slide-y-reverse-transition"
|
||
|
dense
|
||
|
bottom
|
||
|
content-class="text-caption"
|
||
|
>
|
||
|
<template #activator="{ on, attrs }">
|
||
|
<v-btn tile large icon v-bind="attrs" @click="$emit(btn.event)" v-on="on">
|
||
|
<v-icon> {{ btn.icon }} </v-icon>
|
||
|
</v-btn>
|
||
|
</template>
|
||
|
<span>{{ btn.text }}</span>
|
||
|
</v-tooltip>
|
||
|
</template>
|
||
|
</v-item-group>
|
||
|
</template>
|
||
|
|
||
|
<script lang="ts">
|
||
|
import { defineComponent } from "@nuxtjs/composition-api";
|
||
|
|
||
|
export interface ButtonOption {
|
||
|
icon: string;
|
||
|
text: string;
|
||
|
event: string;
|
||
|
children: ButtonOption[];
|
||
|
}
|
||
|
|
||
|
export default defineComponent({
|
||
|
props: {
|
||
|
buttons: {
|
||
|
type: Array as () => ButtonOption[],
|
||
|
required: true,
|
||
|
},
|
||
|
},
|
||
|
});
|
||
|
</script>
|