45 lines
1.1 KiB
Vue
45 lines
1.1 KiB
Vue
<script setup lang="ts">
|
|
import type { SelectListItem } from '@vben/types';
|
|
|
|
import { ToggleGroup, ToggleGroupItem } from '@vben-core/shadcn-ui';
|
|
|
|
defineOptions({
|
|
name: 'PreferenceToggleItem',
|
|
});
|
|
|
|
withDefaults(defineProps<{ disabled?: boolean; items: SelectListItem[] }>(), {
|
|
disabled: false,
|
|
items: () => [],
|
|
});
|
|
|
|
const modelValue = defineModel<string>();
|
|
</script>
|
|
|
|
<template>
|
|
<div
|
|
:class="{
|
|
'pointer-events-none opacity-50': disabled,
|
|
}"
|
|
class="hover:bg-accent flex w-full items-center justify-between rounded-md px-2 py-2"
|
|
disabled
|
|
>
|
|
<span class="text-sm"><slot></slot></span>
|
|
<ToggleGroup
|
|
v-model="modelValue"
|
|
class="gap-2"
|
|
size="sm"
|
|
type="single"
|
|
variant="outline"
|
|
>
|
|
<template v-for="item in items" :key="item.value">
|
|
<ToggleGroupItem
|
|
:value="item.value"
|
|
class="data-[state=on]:bg-primary data-[state=on]:text-primary-foreground h-7 rounded-sm"
|
|
>
|
|
{{ item.label }}
|
|
</ToggleGroupItem>
|
|
</template>
|
|
</ToggleGroup>
|
|
</div>
|
|
</template>
|