Autocomplete
Text input + dropdown: searchable single-select.
Pass label (and required) to name the field: iOS and web render the label above the field, while Android floats the Material 3 in-container label once the list opens or a value fills the field. On Android the field grows with the user's text size, and a label longer than the field truncates on one line clear of the toggle while the field's accessible name stays the whole label. The required star is decorative: a screen reader hears the field as required, from aria-required on the web and from its name ("Assigned to, required") on iOS and Android. The field fills the parent it is given; a step of its own (xs, lg, …, with start to pin it to the leading edge) or a Container step sets its measure.
In glass mode the suggestion list is a dense-layer glass card under the field (or above it when it fits there); the field, its caret and its toggle stay in place, and picking a suggestion commits the value at once. Solid mode paints the skin's own list.
Arrow Down and Arrow Up open the list and highlight an option while focus stays in the text field. Navigation stops at the first and last matches. Home and End jump to those limits once an option is highlighted; otherwise they retain their text-editing behavior. Enter chooses the highlighted option, Escape closes the list without changing the query, and Tab closes it while moving focus. Typing resets the highlight. Confirming an input-method candidate does not select an option or submit a surrounding Form.
Use value with onValueChange to control the selection, and use "" for a controlled empty value. The callback reports selections and clearing the field. onSelect remains a selection-only notification. The independent query/onQueryChange pair controls filtering; choosing an option resets the query to "".
The disclosure button has a real target of at least 24px on web, 44pt on iOS, and 48dp on Android. The small iOS field keeps a 44pt height so its touch target fits inside the field; its typography remains compact.
Assigned to
iOS
Assigned to
Android
Assigned to
Web
tsx
Default
Required field
With helper text
Disabled
Controlled selection
Measure
Props
Do & Don’t
When to use
Don’t
Type or click: a search field for three fixed options is overhead with nothing to filter.
Do
Size
A plain select for short, fixed lists; reserve the autocomplete for long, searchable ones.
Filtering
Don’t
Try typing: a plain dropdown wearing a search placeholder ignores every keystroke, so a long list stays as long as it started.
Do
Assigned to
Type a few letters: the list narrows as you go, so a long list stays usable.
Selection
Don’t
Click an option: the field is pinned to an empty value, so the list closes on nothing and you can't tell what you picked.
Do
Assigned to
Click an option: it fills the input and stays marked as selected.
With label
Don’t
Once a value replaces the placeholder, an unlabeled field has nothing left to name it.
Do
Assigned to
A persistent label keeps the field named after a selection has filled the input.
With helper text
Don’t
Type a letter: guidance crammed into the placeholder vanishes the moment you start.
Do
Assigned to
Deactivated users are hidden from the list.
A short placeholder plus persistent helper text keeps the rule visible while you type.
Disabled
Don’t
An empty, dimmed field with no value reads as broken, not as intentionally locked.
Do
Assigned to
Set by the project owner and can't be changed here.
Show the locked value and say why it's fixed, so disabled reads as a settled choice.