Some checks failed
Lock Threads / action (push) Has been cancelled
Mark stale issues and pull requests / stale (push) Has been cancelled
Publish Chatwoot EE docker images / build (linux/amd64, ubuntu-latest) (push) Has been cancelled
Publish Chatwoot EE docker images / build (linux/arm64, ubuntu-22.04-arm) (push) Has been cancelled
Publish Chatwoot EE docker images / merge (push) Has been cancelled
Publish Chatwoot CE docker images / build (linux/amd64, ubuntu-latest) (push) Has been cancelled
Publish Chatwoot CE docker images / build (linux/arm64, ubuntu-22.04-arm) (push) Has been cancelled
Publish Chatwoot CE docker images / merge (push) Has been cancelled
Run Chatwoot CE spec / lint-backend (push) Has been cancelled
Run Chatwoot CE spec / lint-frontend (push) Has been cancelled
Run Chatwoot CE spec / frontend-tests (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (0, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (1, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (10, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (11, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (12, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (13, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (14, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (15, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (2, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (3, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (4, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (5, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (6, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (7, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (8, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (9, 16) (push) Has been cancelled
Run Linux nightly installer / nightly (push) Has been cancelled
- Add Logistics component with progress tracking - Add OrderDetail component for order information - Support data-driven steps and actions - Add blue color scale to widget SCSS - Fix node overflow and progress bar rendering issues - Add English translations for dashboard components Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
86 lines
2.1 KiB
Vue
86 lines
2.1 KiB
Vue
<script setup>
|
|
import { ref, computed } from 'vue';
|
|
import Button from 'dashboard/components-next/button/Button.vue';
|
|
|
|
const props = defineProps({
|
|
options: {
|
|
type: Array,
|
|
required: true,
|
|
},
|
|
modelValue: {
|
|
type: String,
|
|
required: true,
|
|
},
|
|
label: {
|
|
type: String,
|
|
required: true,
|
|
},
|
|
subMenuPosition: {
|
|
type: String,
|
|
default: 'right',
|
|
validator: value => {
|
|
return ['right', 'left', 'bottom'].includes(value);
|
|
},
|
|
},
|
|
});
|
|
|
|
const emit = defineEmits(['update:modelValue']);
|
|
|
|
const isOpen = ref(false);
|
|
|
|
const labelValue = computed(() => props.label);
|
|
|
|
const toggleMenu = () => {
|
|
isOpen.value = !isOpen.value;
|
|
};
|
|
|
|
const handleSelect = value => {
|
|
emit('update:modelValue', value);
|
|
isOpen.value = false;
|
|
};
|
|
</script>
|
|
|
|
<template>
|
|
<div
|
|
v-on-clickaway="() => (isOpen = false)"
|
|
class="relative flex flex-col gap-1 w-fit"
|
|
>
|
|
<Button
|
|
icon="i-lucide-chevron-down"
|
|
size="sm"
|
|
trailing-icon
|
|
color="slate"
|
|
variant="faded"
|
|
class="!w-fit max-w-40"
|
|
:class="{ 'dark:!bg-n-alpha-2 !bg-n-slate-9/20': isOpen }"
|
|
:label="labelValue"
|
|
@click="toggleMenu"
|
|
/>
|
|
<div
|
|
v-if="isOpen"
|
|
class="absolute select-none max-w-64 flex flex-col gap-1 bg-n-alpha-3 backdrop-blur-[100px] p-1 top-0 shadow-lg z-40 rounded-lg border border-n-weak dark:border-n-strong/50"
|
|
:class="{
|
|
'ltr:left-full rtl:right-full ltr:ml-1 rtl:mr-1':
|
|
subMenuPosition === 'right',
|
|
'ltr:right-full rtl:left-full ltr:mr-1 rtl:ml-1':
|
|
subMenuPosition === 'left',
|
|
'top-full mt-1 ltr:right-0 rtl:left-0': subMenuPosition === 'bottom',
|
|
}"
|
|
>
|
|
<Button
|
|
v-for="option in options"
|
|
:key="option.value"
|
|
:label="option.label"
|
|
:icon="option.value === modelValue ? 'i-lucide-check' : ''"
|
|
size="sm"
|
|
variant="ghost"
|
|
color="slate"
|
|
trailing-icon
|
|
class="!justify-end !px-2.5 !h-7"
|
|
:class="{ '!bg-n-alpha-2': option.value === modelValue }"
|
|
@click="handleSelect(option.value)"
|
|
/>
|
|
</div>
|
|
</div>
|
|
</template>
|