select

Select with status badges

Select with status badges

Загрузка превью…

src/select/c-select-19.vue

<script setup lang="ts">
import { Badge } from "@/components/reui/badge"
import { Field } from "@/components/ui/field"
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"

const statuses = [
  { value: "1", label: "In Progress", variant: "warning-outline" as const },
  { value: "2", label: "Completed", variant: "success-outline" as const },
  { value: "3", label: "Pending", variant: "info-outline" as const },
  { value: "4", label: "Cancelled", variant: "primary-outline" as const },
  { value: "5", label: "Rejected", variant: "destructive-outline" as const },
]

function findStatus(value: unknown) {
  return statuses.find((status) => status.value === value)
}
</script>

<template>
  <Field class="max-w-xs">
    <Select :default-value="statuses[2]!.value">
      <SelectTrigger class="w-[200px]">
        <span class="flex items-center gap-2">
          Status:
          <!--
            reka-ui's SelectValue отдаёт только textContent выбранного
            SelectItem, тогда как Radix's Select.Value заново монтирует
            children целиком (см. комментарий в c-select-6.vue).
          -->
          <SelectValue placeholder="Select status">
            <template #default="{ modelValue }">
              <Badge v-if="findStatus(modelValue)" :variant="findStatus(modelValue)!.variant">
                {{ findStatus(modelValue)!.label }}
              </Badge>
            </template>
          </SelectValue>
        </span>
      </SelectTrigger>
      <SelectContent position="popper">
        <SelectItem v-for="status in statuses" :key="status.value" :value="status.value">
          <Badge :variant="status.variant">
            {{ status.label }}
          </Badge>
        </SelectItem>
      </SelectContent>
    </Select>
  </Field>
</template>

Установка

npx shadcn-vue@latest add https://revueui.rootapi.dev/r/c-select-19.json

Зависимости реестра

Источник: порт из ReUI (Keenthemes, MIT)