select

Timezone select with UTC offsets

Timezone select with UTC offsets

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

src/select/c-select-28.vue

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

const americas = [
  { value: "est", label: "EST", offset: "UTC-5" },
  { value: "cst", label: "CST", offset: "UTC-6" },
  { value: "pst", label: "PST", offset: "UTC-8" },
]

const europe = [
  { value: "gmt", label: "GMT", offset: "UTC+0" },
  { value: "cet", label: "CET", offset: "UTC+1" },
]

const asia = [
  { value: "ist", label: "IST", offset: "UTC+5:30" },
  { value: "jst", label: "JST", offset: "UTC+9" },
]
</script>

<template>
  <Field class="max-w-xs">
    <Select>
      <SelectTrigger>
        <SelectValue placeholder="Select a timezone" />
      </SelectTrigger>
      <SelectContent position="popper">
        <SelectGroup>
          <SelectLabel>Americas</SelectLabel>
          <SelectItem v-for="tz in americas" :key="tz.value" :value="tz.value">
            <span class="flex items-center justify-between gap-3">
              <span>{{ tz.label }}</span>
              <span class="text-muted-foreground text-xs">
                {{ tz.offset }}
              </span>
            </span>
          </SelectItem>
        </SelectGroup>
        <SelectSeparator />
        <SelectGroup>
          <SelectLabel>Europe</SelectLabel>
          <SelectItem v-for="tz in europe" :key="tz.value" :value="tz.value">
            <span class="flex items-center justify-between gap-3">
              <span>{{ tz.label }}</span>
              <span class="text-muted-foreground text-xs">
                {{ tz.offset }}
              </span>
            </span>
          </SelectItem>
        </SelectGroup>
        <SelectSeparator />
        <SelectGroup>
          <SelectLabel>Asia</SelectLabel>
          <SelectItem v-for="tz in asia" :key="tz.value" :value="tz.value">
            <span class="flex items-center justify-between gap-3">
              <span>{{ tz.label }}</span>
              <span class="text-muted-foreground text-xs">
                {{ tz.offset }}
              </span>
            </span>
          </SelectItem>
        </SelectGroup>
      </SelectContent>
    </Select>
  </Field>
</template>

Установка

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

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

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