Select
Built on Base UI Select, and consumes its API natively: value is generic, onValueChange receives (value | null, eventDetails), and Select.Value resolves the selected item’s label from the items prop on Select.Root.
Installation
import { Select } from "@o/pipeline/experimental/components/select";
Default
Pass items to Select.Root so Select.Value renders the selected item’s label; without it, the raw value is rendered.
placeholder
Rendered by Select.Value while no value is selected.
Custom trigger
Select.Trigger renders a Button and accepts its props. Pass render to opt out of the default button (including its caret) and supply a completely different trigger element — see FilterChip in the web app for a real example.
Long lists
Lists scroll inside the popup (capped at max-h-96 by default); scroll arrows appear automatically at whichever edge has more items.
alignItemWithTrigger
By default the popup is anchored below the trigger. Pass alignItemWithTrigger on Select.Content to overlap the trigger instead, with the selected item aligned to the trigger text (only applies to mouse input, and is disabled automatically when there is not enough space).