Select
Built on Base UI Select, and consumes its API natively:
valueis genericonValueChangereceives(value | null, eventDetails)Select.Valueresolves the selected item’s label from theitemsprop onSelect.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.
With descriptions and icons
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 half the viewport by default, bounded by the available height below the trigger); 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).