Select

Dropdown (native/custom).

Also known as:
  • Dropdown
  • Dropdown select
  • Dropdown menu nav
  • Combo Box
  • Choice Select
  • Option Select
  • Picklist
  • Selection Menu

Overview

Purpose

The Select component dropdown (native/custom).within our design system. It follows our compound layer principles, ensuring consistency and reusability across applications.

When to Use

  • Use when you need collecting user input
  • Appropriate for inputs contexts
  • Follows compound component patterns

When Not to Use

  • Avoid when simpler alternatives exist
  • Don't use for display-only content
  • Consider alternatives for edge cases

Live Example

import React from 'react';
import Select from './components/Select';
import props from '/props.json';

export default function App() {
  return (
    <div style={{ padding: '2rem', display: 'flex', alignItems: 'center', justifyContent: 'center', minHeight: '100vh' }}>
      <Select {...props}>
        {props.children || 'Example select content'}
      </Select>
    </div>
  );
}

Anatomy

Understanding the structure of the Select component helps ensure proper implementation and customization.

Property Description Type
rootSlot rendered into [data-slot="select"].Root
contentContent region of the component.Slot
optionsAvailable optionsSlot
searchSearch region of the component.Slot
triggerTrigger region of the component.Slot
selectContainerSelect container region of the component.Part
selectIndicatorSelect indicator region of the component.Part
indicatorIconIndicator icon region of the component.Part
clearButtonClear button region of the component.Part
clearIconClear icon region of the component.Part
comboboxContainerCombobox container region of the component.Part
comboboxInputCombobox input region of the component.Part
comboboxListCombobox list region of the component.Part
comboboxOptionCombobox option region of the component.Part
searchInputSearch input region of the component.Part
textText region of the component.Part
iconsIcons region of the component.Part
clearClear region of the component.Part
chevronIconChevron icon region of the component.Part
searchContainerSearch container region of the component.Part
emptyStateEmpty state region of the component.Part
optionSlot rendered into [data-slot="select-option"].Slot (required)
checkCheck region of the component.Part

Variants & States

import React from 'react';
import Select from './components/Select';
import props from '/props.json';

export default function App() {
  return (
    <div style={{ padding: '2rem', display: 'flex', alignItems: 'center', justifyContent: 'center', minHeight: '100vh' }}>
      <Select {...props}>
        {props.children || 'Example select content'}
      </Select>
    </div>
  );
}

API Reference

Props

NameTypeRequiredDefaultDescription
placeholderstringNo'Select an option...'
classNamestringNo''
sizeControlSizeNo'md'
clearablebooleanNofalse
loadingbooleanNofalse
namestringNo
requiredbooleanNo
onBlurReact.FocusEventHandler<HTMLElement>No{onBlur

Accessibility

Standards Compliance

This component follows WCAG 2.1 AA guidelines and includes proper ARIA attributes, keyboard navigation, and screen reader support.

Common Pitfalls

  • Custom menus often inaccessible
  • no keyboard support.

Accessibility Checklist

  • Keyboard navigation support
  • Screen reader compatibility
  • Color contrast compliance
  • Focus management
  • ARIA attributes
  • Reduced motion support

Usage Guidelines

✓ Do

  • Use consistent spacing and sizing
  • Follow established patterns
  • Provide clear labels and descriptions
  • Test with assistive technologies

✗ Don't

  • Override core functionality
  • Use without proper context
  • Ignore accessibility requirements
  • Modify without design system approval

Examples

Basic Usage

Simple implementation with default props and common configurations.

import React from 'react';
import Select from './components/Select';
import props from '/props.json';

export default function App() {
  return (
    <div style={{ padding: '2rem', display: 'flex', alignItems: 'center', justifyContent: 'center', minHeight: '100vh' }}>
      <Select {...props}>
        {props.children || 'Example select content'}
      </Select>
    </div>
  );
}

Advanced Usage

Complex patterns including composition, state management, and real-world scenarios.

import React from 'react';

export default function App() {
  return (
    <div style={{ 
      padding: '2rem', 
      display: 'flex',
      flexDirection: 'column',
      gap: '1.5rem'
    }}>
      <h3>Select - Advanced Patterns</h3>
      <p>Advanced usage patterns for Select include:</p>
      <ul>
        <li>Composition with other components</li>
        <li>Custom styling and theming</li>
        <li>Controlled vs uncontrolled patterns</li>
        <li>Form integration</li>
        <li>Accessibility enhancements</li>
      </ul>
      <p style={{ color: '#6b7280', fontStyle: 'italic' }}>
        Full advanced examples coming soon.
      </p>
    </div>
  );
}

Development Tools

Use these tools to analyze the component's performance, design tokens, and accessibility during development.

Contribute

Help us improve the Select component documentation. Found an issue or have suggestions?

Related Components