select

Select

Lets the user pick one option from a list that opens below the trigger at its width, joining a Field.

States: Default, Focus, Disabled, Invalid

Parts

PartFileDoes
SelectSelect.vueGroups all parts of the select.
SelectContentSelectContent.vueHolds the options of the select while it is open.
SelectGroupSelectGroup.vueGroups related options of the select.
SelectItemSelectItem.vueOffers one option the user can pick in the select.
SelectItemTextSelectItemText.vueHolds the text of an option, which the select shows once chosen.
SelectLabelSelectLabel.vueLabels a group of options in the select.
SelectScrollDownButtonSelectScrollDownButton.vueScrolls the options down when the list is longer than the view.
SelectScrollUpButtonSelectScrollUpButton.vueScrolls the options up when the list is longer than the view.
SelectSeparatorSelectSeparator.vueSeparates groups of options in the select.
SelectTriggerSelectTrigger.vueOpens and closes the list of options in the select.
SelectValueSelectValue.vueShows the chosen option, or a placeholder when nothing is chosen.

Anatomy

<Select>
  <SelectTrigger>
    <SelectValue />
  </SelectTrigger>
  <SelectContent>
    <SelectItem>
      <SelectItemText />
    </SelectItem>
  </SelectContent>
</Select>

Styling

PartRecipe
SelectContentselect-content
SelectGroupselect-group
SelectItemselect-item
SelectItemselect-item-indicator
SelectLabelselect-label
SelectScrollDownButtonselect-scroll-button
SelectScrollUpButtonselect-scroll-button
SelectSeparatorselect-separator
SelectTriggerselect-trigger
SelectTriggerselect-chevron
SelectValueselect-value
SelectValueselect-value-placeholder

Install

Writes 12 files into components/ui/select/. For agents, npx @frontic/ui docs select prints this reference as markdown; the MCP server serves the same.

npm packages
@lucide/vue
@vueuse/core
class-variance-authority
reka-ui

API reference

Select Select.vue

Groups all parts of the select.

PropTypeDefault
openboolean—
defaultOpenbooleanfalse
defaultValueAcceptableValue | AcceptableValue[]—
modelValueAcceptableValue | AcceptableValue[]—
nullableValuestring''
bystring | ((a: AcceptableValue, b: AcceptableValue) => boolean)—
dirDirection—
multiplebooleanfalse
autocompletestring—
disabledbooleanfalse
namestring—
requiredbooleanfalse
EventPayload
update:modelValuevalue: AcceptableValue
update:openvalue: boolean
SlotSlot props
default{ modelValue: AcceptableValue | AcceptableValue[] | undefined; open: boolean; }

SelectContent SelectContent.vue

SelectGroup SelectGroup.vue

SelectItem SelectItem.vue

SelectItemText SelectItemText.vue

SelectLabel SelectLabel.vue

SelectScrollDownButton SelectScrollDownButton.vue

SelectScrollUpButton SelectScrollUpButton.vue

SelectSeparator SelectSeparator.vue

SelectTrigger SelectTrigger.vue

SelectValue SelectValue.vue

Example
State