Select
Displays a list of options for the user to pick from—triggered by a button.
vue
<script setup lang="ts">
import {
SelectRoot,
SelectTrigger,
SelectContent,
SelectGroup,
SelectLabel,
SelectItem,
SelectSeparator,
} from '@typlog/ui'
</script>
<template>
<SelectRoot default-value="apple">
<SelectTrigger placeholder="Select..." />
<SelectContent>
<SelectGroup>
<SelectLabel>Fruits</SelectLabel>
<SelectItem value="orange">Orange</SelectItem>
<SelectItem value="apple">Apple</SelectItem>
<SelectItem value="grape" disabled>Grape</SelectItem>
</SelectGroup>
<SelectSeparator />
<SelectGroup>
<SelectLabel>Vegetables</SelectLabel>
<SelectItem value="carrot">Carrot</SelectItem>
<SelectItem value="potato">Potato</SelectItem>
</SelectGroup>
</SelectContent>
</SelectRoot>
</template>API Reference
SelectRoot
The root element of a select, it contains all the parts of a select.
| Prop | Default | Type |
|---|---|---|
| color | – | |
| highContrast | – | boolean |
| size | – | "1""2""3" |
SelectTrigger
| Prop | Default | Type |
|---|---|---|
| placeholder | – | string |
| radius | – | "none""small""medium""large""full" |
| variant | – | "soft""surface""ghost" |
SelectContent
| Prop | Default | Type |
|---|---|---|
| variant | – | "solid""soft" |
Examples
Size
vue
<script setup lang="ts">
import {
SelectRoot,
SelectTrigger,
SelectContent,
SelectGroup,
SelectLabel,
SelectItem,
SelectSeparator,
} from '@typlog/ui'
</script>
<template>
<div class="flex items-center gap-4">
<SelectRoot size="1">
<SelectTrigger placeholder="Select..." />
<SelectContent>
<SelectGroup>
<SelectLabel>Fruits</SelectLabel>
<SelectItem value="orange">Orange</SelectItem>
<SelectItem value="apple">Apple</SelectItem>
<SelectItem value="grape" disabled>Grape</SelectItem>
</SelectGroup>
<SelectSeparator />
<SelectGroup>
<SelectLabel>Vegetables</SelectLabel>
<SelectItem value="carrot">Carrot</SelectItem>
<SelectItem value="potato">Potato</SelectItem>
</SelectGroup>
</SelectContent>
</SelectRoot>
<SelectRoot size="2">
<SelectTrigger placeholder="Select..." />
<SelectContent>
<SelectGroup>
<SelectLabel>Fruits</SelectLabel>
<SelectItem value="orange">Orange</SelectItem>
<SelectItem value="apple">Apple</SelectItem>
<SelectItem value="grape" disabled>Grape</SelectItem>
</SelectGroup>
<SelectSeparator />
<SelectGroup>
<SelectLabel>Vegetables</SelectLabel>
<SelectItem value="carrot">Carrot</SelectItem>
<SelectItem value="potato">Potato</SelectItem>
</SelectGroup>
</SelectContent>
</SelectRoot>
<SelectRoot size="3">
<SelectTrigger placeholder="Select..." />
<SelectContent>
<SelectGroup>
<SelectLabel>Fruits</SelectLabel>
<SelectItem value="orange">Orange</SelectItem>
<SelectItem value="apple">Apple</SelectItem>
<SelectItem value="grape" disabled>Grape</SelectItem>
</SelectGroup>
<SelectSeparator />
<SelectGroup>
<SelectLabel>Vegetables</SelectLabel>
<SelectItem value="carrot">Carrot</SelectItem>
<SelectItem value="potato">Potato</SelectItem>
</SelectGroup>
</SelectContent>
</SelectRoot>
</div>
</template>Variant
The trigger field supports three variants: soft, surface, and ghost.
vue
<script setup lang="ts">
import {
SelectRoot,
SelectTrigger,
SelectContent,
SelectGroup,
SelectLabel,
SelectItem,
SelectSeparator,
} from '@typlog/ui'
</script>
<template>
<div class="flex items-center gap-4">
<SelectRoot>
<SelectTrigger placeholder="Select..." variant="soft" />
<SelectContent>
<SelectGroup>
<SelectLabel>Fruits</SelectLabel>
<SelectItem value="orange">Orange</SelectItem>
<SelectItem value="apple">Apple</SelectItem>
<SelectItem value="grape" disabled>Grape</SelectItem>
</SelectGroup>
<SelectSeparator />
<SelectGroup>
<SelectLabel>Vegetables</SelectLabel>
<SelectItem value="carrot">Carrot</SelectItem>
<SelectItem value="potato">Potato</SelectItem>
</SelectGroup>
</SelectContent>
</SelectRoot>
<SelectRoot>
<SelectTrigger placeholder="Select..." variant="surface" />
<SelectContent>
<SelectGroup>
<SelectLabel>Fruits</SelectLabel>
<SelectItem value="orange">Orange</SelectItem>
<SelectItem value="apple">Apple</SelectItem>
<SelectItem value="grape" disabled>Grape</SelectItem>
</SelectGroup>
<SelectSeparator />
<SelectGroup>
<SelectLabel>Vegetables</SelectLabel>
<SelectItem value="carrot">Carrot</SelectItem>
<SelectItem value="potato">Potato</SelectItem>
</SelectGroup>
</SelectContent>
</SelectRoot>
<SelectRoot>
<SelectTrigger placeholder="Select..." variant="ghost" />
<SelectContent>
<SelectGroup>
<SelectLabel>Fruits</SelectLabel>
<SelectItem value="orange">Orange</SelectItem>
<SelectItem value="apple">Apple</SelectItem>
<SelectItem value="grape" disabled>Grape</SelectItem>
</SelectGroup>
<SelectSeparator />
<SelectGroup>
<SelectLabel>Vegetables</SelectLabel>
<SelectItem value="carrot">Carrot</SelectItem>
<SelectItem value="potato">Potato</SelectItem>
</SelectGroup>
</SelectContent>
</SelectRoot>
</div>
</template>The content popup supports three variants: soft and solid.
vue
<script setup lang="ts">
import {
SelectRoot,
SelectTrigger,
SelectContent,
SelectGroup,
SelectLabel,
SelectItem,
SelectSeparator,
} from '@typlog/ui'
</script>
<template>
<div class="flex items-center gap-4">
<SelectRoot>
<SelectTrigger placeholder="Select..." />
<SelectContent variant="soft">
<SelectGroup>
<SelectLabel>Fruits</SelectLabel>
<SelectItem value="orange">Orange</SelectItem>
<SelectItem value="apple">Apple</SelectItem>
<SelectItem value="grape" disabled>Grape</SelectItem>
</SelectGroup>
<SelectSeparator />
<SelectGroup>
<SelectLabel>Vegetables</SelectLabel>
<SelectItem value="carrot">Carrot</SelectItem>
<SelectItem value="potato">Potato</SelectItem>
</SelectGroup>
</SelectContent>
</SelectRoot>
<SelectRoot>
<SelectTrigger placeholder="Select..." />
<SelectContent variant="solid">
<SelectGroup>
<SelectLabel>Fruits</SelectLabel>
<SelectItem value="orange">Orange</SelectItem>
<SelectItem value="apple">Apple</SelectItem>
<SelectItem value="grape" disabled>Grape</SelectItem>
</SelectGroup>
<SelectSeparator />
<SelectGroup>
<SelectLabel>Vegetables</SelectLabel>
<SelectItem value="carrot">Carrot</SelectItem>
<SelectItem value="potato">Potato</SelectItem>
</SelectGroup>
</SelectContent>
</SelectRoot>
</div>
</template>Multiple
vue
<script setup lang="ts">
import {
SelectRoot,
SelectTrigger,
SelectContent,
SelectItem,
} from '@typlog/ui'
</script>
<template>
<SelectRoot multiple>
<SelectTrigger placeholder="Select..." />
<SelectContent>
<SelectItem value="orange">Orange</SelectItem>
<SelectItem value="apple">Apple</SelectItem>
<SelectItem value="grape">Grape</SelectItem>
<SelectItem value="carrot">Carrot</SelectItem>
<SelectItem value="potato">Potato</SelectItem>
</SelectContent>
</SelectRoot>
</template>