toggle-item.vue 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. <script setup lang="ts">
  2. import type { SelectListItem } from '@vben/types';
  3. import { ToggleGroup, ToggleGroupItem } from '@vben-core/shadcn-ui';
  4. defineOptions({
  5. name: 'PreferenceToggleItem',
  6. });
  7. withDefaults(defineProps<{ disabled: boolean; items: SelectListItem[] }>(), {
  8. disabled: false,
  9. items: () => [],
  10. });
  11. const modelValue = defineModel<string>();
  12. </script>
  13. <template>
  14. <div
  15. disabled
  16. class="hover:bg-accent flex w-full items-center justify-between rounded-md px-2 py-2"
  17. :class="{
  18. 'pointer-events-none opacity-50': disabled,
  19. }"
  20. >
  21. <span class="text-sm"><slot></slot></span>
  22. <ToggleGroup
  23. v-model="modelValue"
  24. type="single"
  25. variant="outline"
  26. size="sm"
  27. class="gap-2"
  28. >
  29. <template v-for="item in items" :key="item.value">
  30. <ToggleGroupItem
  31. :value="item.value"
  32. class="data-[state=on]:bg-primary data-[state=on]:text-primary-foreground h-7 rounded-sm"
  33. >
  34. {{ item.label }}
  35. </ToggleGroupItem>
  36. </template>
  37. </ToggleGroup>
  38. </div>
  39. </template>