1. Components
  2. Forms and inputs
  3. SearchField

SearchField

SearchField is a text field designed for searches.

<SearchField aria-label="Search" />

Installation

npx dotui-cli@latest add search-field

Usage

Use a SearchField to allow a user to enter and clear a search query.

import { SearchField } from "@/components/core/search-field";
 
<SearchField label="Search" description="Enter your search query." />;
import { SearchIcon, XIcon } from "lucide-react";
import { Button } from "@/components/core/button";
import { Label, Description } from "@/components/core/field";
import { InputRoot, Input } from "@/components/core/input";
import { SearchFieldRoot } from "@/components/core/search-field";
 
<SearchFieldRoot>
  <Label>Email</Label>
  <InputRoot>
    <SearchIcon />
    <Input />
    <Button slot="clear">
      <XIcon />
    </Button>
  </InputRoot>
  <Description>Enter your search query.</Description>
</SearchFieldRoot>;

Options

Label

A visual label can be provided for the SearchField using the label prop or a hidden label using aria-label prop.

<SearchField label="Search" />
<SearchField aria-label="Search" />

Description

A description can be supplied to a SearchField via the description prop. The description is always visible unless the isInvalid prop is true and an error message is provided.

Enter your search query
<SearchField label="Search" description="Enter your search query." />

Error message

An errorMessage can be supplied to a SearchField, which will be displayed when the isInvalid prop is set to true.

Please fill out this field.
<SearchField
  label="Search"
  isInvalid
  errorMessage="Please fill out this field."
/>

Size

Use the size prop to control the size of the SearchField. The default size is "md".

<SearchField size="sm" />
<SearchField size="md" />
<SearchField size="lg" />

Disabled

Use the isDisabled prop to disable the SearchField.

<SearchField isDisabled />

ReadOnly

The isReadOnly boolean prop makes the SearchField's text content immutable. Unlike isDisabled, the SearchField remains focusable and the contents can still be copied.

<SearchField isReadOnly />

Required

Use the isRequired prop to mark the SearchField as required. Use the necessityIndicator prop to control the visual style of the required state.

<SearchField label="Search" isRequired />
<SearchField label="Search" isRequired necessityIndicator="icon" />
<SearchField label="Search" isRequired necessityIndicator="label" />
<SearchField label="Search" necessityIndicator="label" />

Uncontrolled

Use the defaultValue prop to set the default input value.

<SearchField defaultValue="Marvel movies" />

Controlled

Use the value and onChange props to control the value of the input.

mirrored search text: Is dotUI the next-gen ui lib?

const [inputValue, setInputValue] = React.useState("Marvel movies");
return <SearchField value={inputValue} onChange={setInputValue} />;

Composition

If you need to customize things further, you can drop down to the composition level.

Enter your search query.
<SearchFieldRoot>
  <Label>Search</Label>
  <InputRoot prefix={<SearchIcon />}>
    <Input />
  </InputRoot>
  <Description>Enter your search query.</Description>
</SearchFieldRoot>

API Reference

PropTypeDefaultDescription
labelReactNode-The content to display as the label.
descriptionReactNode-A description for the field. Provides a hint such as specific requirements for what to choose.
errorMessageReactNode | (v: ValidationResult) => ReactNode-An error message for the field.
size"sm" | "md" | "lg""md"The size of the input.
isInvalidboolean-Whether the value is invalid.
isDisabledboolean-Whether the input is disabled.
isReadOnlyboolean-Whether the input can be selected but not changed by the user.
isRequiredboolean-Whether user input is required on the input before form submission.
validate(value: string) => ValidationError | true | null | undefined-A function that returns an error message if a given value is invalid. Validation errors are displayed to the user when the form is submitted if validationBehavior="native". For realtime validation, use the isInvalid prop instead.
autoFocusboolean-Whether the element should receive focus on render.
valuestring-The current value (controlled).
defaultValuestring-The default value (uncontrolled).
autoCompletestring-Describes the type of autocomplete functionality the input should provide if any.
maxLengthnumber-The maximum number of characters supported by the input.
minLengthnumber-The minimum number of characters required by the input.
patternstring-Regex pattern that the value of the input must match to be valid.
type'text' | 'search' | 'url' | 'tel' | 'email' | 'password' | string & {}-The type of input to render.
inputMode'none' | 'text' | 'tel' | 'url' | 'email' | 'numeric' | 'decimal' | 'search'-Hints at the type of data that might be entered by the user while editing the element or its contents.
namestring-The name of the input element, used when submitting an HTML form.
validationBehavior'native' | 'aria''native'Whether to use native HTML form validation to prevent form submission when the value is missing or invalid, or mark the field as required or invalid via ARIA.
childrenReactNode | (values: SearchFieldRenderProps & {defaultChildren: ReactNode | undefined}) => ReactNode-The children of the component. A function may be provided to alter the children based on component state.
classNamestring-The CSS className for the element.
styleCSSProperties | (values: SearchFieldRenderProps & {defaultStyle: CSSProperties}) => CSSProperties-The inline style for the element. A function may be provided to compute the style based on component state.
EventTypeDescription
onSubmit(value: string) => voidHandler that is called when the SearchField is submitted.
onClear() => voidHandler that is called when the clear button is pressed.
onFocus(e: FocusEvent<Target>) => voidHandler that is called when the element receives focus.
onBlur(e: FocusEvent<Target>) => voidHandler that is called when the element loses focus.
onFocusChange(isFocused: boolean) => voidHandler that is called when the element's focus status changes.
onKeyDown(e: KeyboardEvent) => voidHandler that is called when a key is pressed.
onKeyUp(e: KeyboardEvent) => voidHandler that is called when a key is released.
onChange(value: T) => voidHandler that is called when the value changes.
onCopyClipboardEventHandler<HTMLInputElement>Handler that is called when the user copies text.
onCutClipboardEventHandler<HTMLInputElement>Handler that is called when the user cuts text.
onPasteClipboardEventHandler<HTMLInputElement>Handler that is called when the user pastes text.
onCompositionStartCompositionEventHandler<HTMLInputElement>Handler that is called when a text composition system starts a new text composition session.
onCompositionEndCompositionEventHandler<HTMLInputElement>Handler that is called when a text composition system completes or cancels the current text composition session.
onCompositionUpdateCompositionEventHandler<HTMLInputElement>Handler that is called when a new character is received in the current text composition session.
onSelectReactEventHandler<HTMLInputElement>Handler that is called when text in the input is selected.
onBeforeInputFormEventHandler<HTMLInputElement>Handler that is called when the input value is about to be modified.
onInputFormEventHandler<HTMLInputElement>Handler that is called when the input value is modified.
Data attributeDescription
[data-empty]Whether the search field is empty.
[data-disabled]Whether the text field is disabled.
[data-invalid]Whether the text field is invalid.
dotUI

Bringing singularity to the web.

Built by mehdibha. The source code is available on GitHub.