Used when a payout is triggered.
Teams organized by department.
npx shadcn@latest add https://sdk-components.thesqd.com/r/select.jsonimport { Select } from "@/components/ui/select";import { Select } from "@/components/ui/select";
export function Example() {
return (
<Select
defaultValue="usd"
placeholder="Select a currency"
triggerClassName="w-full"
options={[
{ value: "usd", label: "USD — United States Dollar" },
{ value: "eur", label: "EUR — Euro" },
{ value: "gbp", label: "GBP — British Pound" },
]}
/>
);
}Select (single component — pass options or groups as data)
├── options={[{ value, label, disabled? }]}
├── groups={[{ label?, options: [{value, label, disabled?}] }]}
├── placeholder={<ReactNode>}
├── size="default" | "sm"
├── triggerClassName / contentClassName
└── ...rest (value / defaultValue / onValueChange / disabled / id)
Variants on the same component:
Select (default — popover listbox)
├── searchable → Combobox-backed input + filtered list
├── multiple → multi-select (works with or without searchable)
└── searchable + multiple → multi-search; picks render comma-joined as real input text
Without options/groups, Select stays compound — drop in SelectTrigger +
SelectContent + SelectItem children manually. The slot exports — SelectTrigger,
SelectValue, SelectContent, SelectItem, SelectGroup, SelectLabel,
SelectSeparator — remain available as the escape hatch. The Combobox* slot
exports also live in select.tsx for fully custom searchable layouts (chips, etc.).
Used when a payout is triggered.
Teams organized by department.
Each option has a `status` tone — a leading colored dot.
Each option has an `icon` (lucide component).
Pick one or more — the trigger collapses to `{n} selected` past 3 picks.
Multi-select with status dots on every option.
Multi-select with lucide icons on every option.
Pass `searchable` to Select for a Combobox-style filter input.
Pre-selected default value.
Searchable Combobox — each option carries a lucide icon.
Searchable Combobox with status dots.
Select
| Prop | Type | Default | Description |
|---|---|---|---|
options | SelectOption[] | — | Flat list of options. Each entry: `{ value, label, disabled?, icon?, status? }`. `icon` is any lucide component (rendered before the label). `status` is `"success" | "warning" | "destructive" | "info" | "muted" | "brand"` — renders a leading colored dot. `icon` wins when both are set. Works in single, multi, and searchable modes. |
groups | SelectGroupSpec[] | — | Grouped options — each entry has an optional `label` and an `options` array. Separators auto-render between groups. |
placeholder | ReactNode | — | Placeholder shown in the trigger before a selection is made. |
size | "sm" | "default" | "default" | Trigger height: sm = h-8, default = h-10. |
multiple | boolean | false | Allow multiple selections. When true, `value`/`defaultValue` are `string[]` and the trigger renders the joined labels (or `{n} selected` past 3 picks). |
value | string | string[] | — | Controlled selected value (string for single, array when `multiple`). |
defaultValue | string | string[] | — | Uncontrolled initial value. |
onValueChange | (value: string | string[]) => void | — | Fires when the selection changes. |
disabled | boolean | — | Disables the trigger and prevents opening. |
triggerClassName | string | — | Class names applied to the auto-emitted SelectTrigger. |
contentClassName | string | — | Class names applied to the auto-emitted SelectContent. |
Combobox
| Prop | Type | Default | Description |
|---|---|---|---|
searchable | boolean | false | When true, `<Select>` renders the Combobox-backed input + filtered list. Combine with `multiple` for searchable multi-select. Pair with `options` / `groups` exactly like the standard Select. The `Combobox*` slot exports remain available from `@/components/ui/select` for fully custom compound usage. |