Search
A search input component with built-in search icon and optional clear button.
Anatomy
Import and assemble the component:
1import { Search } from "@raystack/apsara";23<Search />
Usage
A text input with the search icon already in place. Set its size, whether it can be cleared, and who owns the value.
Size
Two sizes. large is the default; small fits a toolbar or a table header.
1<Flex direction="column" gap={5} align="center">2 <Search placeholder="Large size search..." />3 <Search size="small" placeholder="Small size search..." />4</Flex>
Clear Button
The Search component can include a clear button that appears when there is input value.
1<Flex direction="column" gap={5} align="center">2 <Search3 placeholder="Type to search..."4 value="Searchable text"5 showClearButton6 />7 <Search placeholder="Basic search..." />8</Flex>
Clearing
Escape clears the input when it has a value. After a clear, from the clear button or from Escape, focus is on the input and onClear receives the triggering event.
When you pass value and onClear, onClear must reset value. In every other case, a clear empties the input and fires onChange and onValueChange with an empty value. Escape clears whether or not showClearButton is set.
When the input is empty, Escape is not handled, so it can close an enclosing Dialog, Popover, or Menu.
Controlled value
Use onValueChange to receive only the new query string, or onChange for the full React change event. The Search component forwards both to the underlying Input.
1(function SearchValueChangeExample() {2 const [query, setQuery] = React.useState("");34 return (5 <Flex direction="column" gap={5} style={{ width: 400 }}>6 <Search7 placeholder="Search items..."8 value={query}9 onValueChange={setQuery}10 showClearButton11 onClear={() => setQuery("")}12 />13 <Text size="small">Query: {query || "(empty)"}</Text>14 </Flex>15 );
API Reference
Renders a search input field with clear functionality.
Prop
Type
Slots
Every rendered part carries a stable data-slot attribute for styling and testing:
| Slot | Element |
|---|---|
search | The role="search" container |
search-input | The <input> element itself |
search-clear | Wrapper around the clear button (when showClearButton) |
search-clear-button | The clear button (when showClearButton) |
Accessibility
The Search component is built with accessibility in mind, following ARIA best practices:
- Container has
role="search"to identify it as a search landmark - Input has
type="search"for semantic HTML - Search icon is marked as decorative with
aria-hidden="true" - Clear button has appropriate
aria-labelfor screen readers - Keyboard navigation support for the clear button
- Input inherits
aria-labelfrom placeholder text
Example with accessibility features:
1<Search2 placeholder="Search items..."3 showClearButton4 value="Searchable text"5 aria-label="Search items"6/>
The component supports keyboard navigation:
- Tab to focus on the search input
- Tab again to focus on the clear button (when visible)
- Enter or Space to trigger the clear button
- Escape to clear the input when it has a value