Select

A custom select with native form values, keyboard navigation, and optional icons and descriptions. Give people the context to choose confidently.

Preview

Live previewCustomize theme
MAKE THE CONNECTION

The right person. The right context.

Bring identities and useful detail into everyday choices.

Open the menu to see roles alongside each person.

Simple, when simple is right.

Native form values

Import

tsx
import { Select } from '@velocityuikit/velocityui'

Props

PropTypeDefaultDescription
labelstring—Label rendered above the select.
size'sm' | 'md' | 'lg''md'Controls height and font size.
optionsSelectOption[]—Array of { value, label, description?, icon?, disabled? }. Icon content is decorative; labels remain plain strings for native form compatibility.
placeholderstring—Renders a disabled first option used as a prompt.
errorstring—Error message below the field. Sets aria-invalid.
hintstring—Helper text shown when there is no error.
requiredbooleanfalseMarks the field as required.
fullWidthbooleanfalseMakes the wrapper fill its container.

Examples

With options array

tsx
import { Select } from '@velocityuikit/velocityui'

const countries = [
  { value: 'us', label: 'United States' },
  { value: 'ca', label: 'Canada' },
  { value: 'gb', label: 'United Kingdom' },
]

export default function Example() {
  return (
    <Select
      label="Country"
      placeholder="Select a country"
      options={countries}
    />
  )
}

With error

tsx
import { Select } from '@velocityuikit/velocityui'

export default function Example() {
  return (
    <Select
      label="Role"
      error="Please select a role."
      options={[
        { value: 'admin', label: 'Administrator' },
        { value: 'editor', label: 'Editor' },
      ]}
    />
  )
}

Theming

Apply a named theme class to <body> or any parent element. All VelocityUI components inside that element will automatically adopt its colors, shadows, and effects. Combine with a density modifier for complete control:

html
/* Pick any named theme */
<body class="vui-theme-ocean">

/* Add a density modifier (optional) */
<body class="vui-theme-midnight vui-density-compact">
<body class="vui-theme-construction vui-density-spacious">

/* Available themes */
/* default  midnight  ocean  dark-cyan  tangerine */
/* construction  glass  soft  high-contrast  monochrome-red */

/* Available densities */
/* vui-density-compact  vui-density-comfortable  vui-density-spacious */