Thrive Design System

Components

Select

A native single-selection dropdown built on Radix UI. For searchable or multi-select, use SelectSearchable.

Installation

npm install @thrivecart/ui
yarn add @thrivecart/ui
pnpm add @thrivecart/ui
bun add @thrivecart/ui

Usage

import {
  Select, SelectContent, SelectItem,
  SelectTrigger, SelectValue,
  SelectGroup, SelectLabel, SelectSeparator,
} from '@thrivecart/ui';

Examples

Order Status

Order Status

Change the status of a customer order

<Select>
<SelectTrigger className="w-60">
  <SelectValue placeholder="Set order status..." />
</SelectTrigger>
<SelectContent>
  <SelectItem value="pending">Pending</SelectItem>
  <SelectItem value="processing">Processing</SelectItem>
  <SelectItem value="shipped">Shipped</SelectItem>
  <SelectItem value="delivered">Delivered</SelectItem>
  <SelectItem value="cancelled">Cancelled</SelectItem>
</SelectContent>
</Select>

Priority Level

Task Priority

Assign a priority level to a support ticket

<Select>
<SelectTrigger className="w-60">
  <SelectValue placeholder="Set priority..." />
</SelectTrigger>
<SelectContent>
  <SelectItem value="low">Low</SelectItem>
  <SelectItem value="medium">Medium</SelectItem>
  <SelectItem value="high">High</SelectItem>
  <SelectItem value="urgent">Urgent</SelectItem>
</SelectContent>
</Select>

Grouped Options

Team Roles

Organize roles into departments with labeled groups

<Select>
<SelectTrigger className="w-60">
  <SelectValue placeholder="Assign role..." />
</SelectTrigger>
<SelectContent>
  <SelectGroup>
    <SelectLabel>Management</SelectLabel>
    <SelectItem value="ceo">CEO</SelectItem>
    <SelectItem value="cto">CTO</SelectItem>
    <SelectItem value="cfo">CFO</SelectItem>
  </SelectGroup>
  <SelectSeparator />
  <SelectGroup>
    <SelectLabel>Engineering</SelectLabel>
    <SelectItem value="frontend">Frontend Developer</SelectItem>
    <SelectItem value="backend">Backend Developer</SelectItem>
    <SelectItem value="fullstack">Full Stack Developer</SelectItem>
  </SelectGroup>
  <SelectSeparator />
  <SelectGroup>
    <SelectLabel>Design</SelectLabel>
    <SelectItem value="ui">UI Designer</SelectItem>
    <SelectItem value="ux">UX Researcher</SelectItem>
  </SelectGroup>
</SelectContent>
</Select>

Payment Method

Payment Method

Select a payment method with icons

<Select>
<SelectTrigger className="w-60">
  <SelectValue placeholder="Payment method..." />
</SelectTrigger>
<SelectContent>
  <SelectItem value="card">
    <MdCreditCard className="inline mr-2" />
    Credit Card
  </SelectItem>
  <SelectItem value="bank">
    <MdAccountBalance className="inline mr-2" />
    Bank Transfer
  </SelectItem>
  <SelectItem value="paypal">
    PayPal
  </SelectItem>
  <SelectItem value="crypto">
    Cryptocurrency
  </SelectItem>
</SelectContent>
</Select>

Size Variants

Small and Default

Use size='sm' for compact layouts like table headers or toolbars

<div className="flex flex-col gap-4">
<Select>
  <SelectTrigger className="w-60" size="sm">
    <SelectValue placeholder="Small — filter by status..." />
  </SelectTrigger>
  <SelectContent>
    <SelectItem value="active">Active</SelectItem>
    <SelectItem value="inactive">Inactive</SelectItem>
  </SelectContent>
</Select>

<Select>
  <SelectTrigger className="w-60">
    <SelectValue placeholder="Default — select status..." />
  </SelectTrigger>
  <SelectContent>
    <SelectItem value="active">Active</SelectItem>
    <SelectItem value="inactive">Inactive</SelectItem>
  </SelectContent>
</Select>
</div>

Disabled

Disabled

Non-interactive select for read-only contexts

<Select disabled>
<SelectTrigger className="w-60">
  <SelectValue placeholder="Disabled..." />
</SelectTrigger>
<SelectContent>
  <SelectItem value="1">Option 1</SelectItem>
</SelectContent>
</Select>

Choosing the Right Select

ComponentSearchMulti-selectIndicatorBest for
SelectNoNoCheckmark (right)Short lists (3–10 items), form fields
SelectSearchableYesOptionalCheckmark (right)Long lists, tagging, team assignment
SelectSearchable indicator="checkbox"YesOptionalCheckbox (left)Column toggles, permissions, settings
SelectMultiCategoryYesYesCheckboxCategorized multi-select (recipients, segments)

Indicator guidance:

  • Use checkmark on the right (indicator="check", default) for standard selection — the user picks a value and the check confirms it.
  • Use checkbox on the left (indicator="checkbox") when items represent toggleable states — the user mentally models each item as enabled/disabled, like toggling table columns or permissions.

Best Practices

Use for short, known lists

Select works best for 3–10 options the user already knows (status, priority, role). For longer lists, use SelectSearchable.

Use groups for related options

Group related options with SelectGroup and SelectLabel when you have distinct categories.

Provide clear placeholders

Use descriptive placeholder text that indicates what type of selection is expected.

Don't use for binary choices

Use a Switch or Checkbox instead of a select with only two options.

Don't use for long lists

If users need to search or scroll through many items, use SelectSearchable instead.

Don't use for actions

This is for selecting values, not triggering actions. Use DropdownMenu for action menus.

Props

Select (Root)

PropTypeDefaultDescription
valuestring-Controlled selected value
defaultValuestring-Uncontrolled default value
onValueChange(value: string) => void-Callback when selection changes
disabledbooleanfalseDisable the entire select
namestring-Form field name for native submission

SelectTrigger

PropTypeDefaultDescription
size'sm' | 'md''md'Trigger height — sm for toolbars, md for forms
classNamestring-Additional className

SelectItem

PropTypeDefaultDescription
valuestring-Item value (required)
disabledbooleanfalseDisable this option

Accessibility

  • Built on Radix UI Select primitives with full ARIA support.
  • Keyboard navigation: arrow keys to navigate, Enter to select, Escape to close.
  • Type-ahead: typing characters jumps to matching items.
  • Focus is managed automatically when the dropdown opens and closes.
  • Screen readers announce the selected value and available options.