Founding price: $35, then $79.99 after 23:59 UTC on 4 November, then $79.99
Get ProTwo lists with buttons between them to move items across, with search, select-all, move-all, disabled items and spoken results.
Derived from this item’s props table, because it declares no controls of its own. Changes drive the preview live.
Use it when people assign a subset of many items: channels, columns, permissions, members.
Do not use it for fewer than about eight items (checkboxes are quicker) or when order matters (use pick-list).
It uses button, input, which the CLI installs for you.
import { TransferList } from "@/components/ui/transfer-list"<TransferList
aria-label="Alert channels"
items={[
{ id: "email", label: "Email" },
{ id: "sms", label: "Text message" },
]}
value={value}
onValueChange={setValue}
titles={["Channels", "Alerts go to"]}
searchable
/>| Prop | Type | Default | Description |
|---|---|---|---|
items | TransferItem[] | - | { id, label, description?, disabled? }. |
value / defaultValue / onValueChange | string[] | [] | Ids on the right, in order. |
titles | [string, string] | ["Available", "Selected"] | Names of the lists, used in labels and announcements. |
searchable | boolean | false | A search field above each list. |
moveAll | boolean | true | Show the move-all buttons. |
Motion respects prefers-reduced-motion: the only animation is the loading spinner, which is switched off. Layout uses logical properties, so the component works in right-to-left languages.
TransferPane (one list) and TransferActions (the buttons) are exported. transfer-tree, transfer-table and pick-list are built from them.
The component ships with a Testing Library test (transfer-list.test.tsx) that covers its keyboard paths, roles and states.