SearchField
Search allows users to quickly find content. The Search field
is made up of the Text field
component and an optional Button
component.
Basic Usage
With an initial value
With a placeholder
With callbacks
With a custom label
With custom screenreader text
With the submit button outside the input
Advanced Usage
For needs that deviate from the basic usage above, use <SearchField.Advanced />
. The children
elements must contain the SearchField.Label
and SearchField.Input
components at a minimum.
With a custom label
With an initial value
With a placeholder
With no clear button
With no submit or clear buttons
Advanced usage with the submit button outside the input
Use class pgn__searchfield_wrapper
to group input elements apart from the submit button.
Theme Variables (SCSS)#
$search-btn-variants: ("light": $primary-500,"dark": $brand-500,);$search-border-radius: 0 !default;$search-line-height: 1.5rem !default;$search-border-color: $gray-500 !default;$search-border-color-interaction: $black !default;$search-border-width: .0625rem !default;$search-border-width-interaction: .125rem !default;$search-disabled-opacity: .3 !default;$search-button-margin: .5rem !default;$input-height-search: calc(#{$input-line-height * 1em} + #{$input-padding-y * 2}) !default;$search-border-focus-color: $black !default;$search-border-focus-width: .3125rem !default;
- onSubmit
func
Required RequiredSpecifies a callback function for when the
SearchField
is submitted by the user. For example:<SearchField onSubmit={(value) => { console.log(value); } />
- label
string
Required |element
Required RequiredSpecifies the label to use for the input field (e.g., for i18n translations).
- className
string
RequiredSpecifies a custom class name.
- onBlur
func
RequiredDefault() => {}Specifies a callback function for when the user loses focus in the
SearchField
component. The default is an empty function. For example:<SearchField onBlur={event => console.log(event)} />
- onChange
func
RequiredDefault() => {}Specifies a callback function for when the value in
SearchField
is changed by the user. The default is an empty function. For example:<SearchField onChange={value => console.log(value)} />
- onClear
func
RequiredDefault() => {}Specifies a callback function for when the value in
SearchField
is cleared by the user. The default is an empty function. For example:<SearchField onClear={() => console.log('search cleared')} />
- onFocus
func
RequiredDefault() => {}Specifies a callback function for when the user focuses in the
SearchField
component. The default is an empty function. For example:<SearchField onFocus={event => console.log(event)} />
- placeholder
string
RequiredSpecifies the placeholder text for the input.
- screenReaderText
shape
Required {label:string
Required |element
Required Required,submitButton:string
Required |element
Required Required,clearButton:}string
Required |element
Required,Default{ label: SEARCH_FIELD_SCREEN_READER_TEXT_LABEL, submitButton: SEARCH_FIELD_SCREEN_READER_TEXT_SUBMIT_BUTTON, clearButton: SEARCH_FIELD_SCREEN_READER_TEXT_CLEAR_BUTTON, }Specifies the screenreader text for both the clear and submit buttons (e.g., for i18n translations). The default is
{ label: 'search', clearButton: 'clear search', searchButton: 'submit search' }
. - value
string
RequiredDefault''Specifies the initial value for the input. The default is an empty string.
- icons
shape
Required {submit:element
Required,clear:}element
,Default{ clear: <Icon src={Close} />, submit: <Icon src={Search} />, }Specifies the icon element(s) to use for the clear and submit buttons. The default is:
{ submit: import {Search} from '@edx/paragon/icons';, clear: import {Close} from '@edx/paragon/icons'. }
- formAriaLabel
string
RequiredSpecifies the aria-label attribute on the form element. This is useful if you use the
SearchField
component more than once on a page. - inputProps
shape
Required {}Default{}Props to be passed to the form input
- variant
enum
Required'light' | 'dark'Default'light'The button style variant to use.
- disabled
bool
RequiredDefaultfalseSpecifies whether the
SearchField
is disabled. - submitButtonLocation
enum
Required'internal' | 'external'Default'internal'Controls whether the search button is internal as an icon or external as a button.
- buttonText
string
RequiredDefault'search'Specifies a text that is displayed on the button. The
submitButtonLocation
prop should be set toexternal
.
- children
node
Required Requiredspecifies the nested child elements. At a minimum,
SearchField.Label
andSearchField.Input
are required. - onSubmit
func
Required Requiredspecifies a callback function for when the
SearchField
is submitted by the user. For example:<SearchField onSubmit={(value) => { console.log(value); } />
- className
string
Requiredspecifies a custom class name.
- onBlur
func
RequiredDefault() => {}specifies a callback function for when the user loses focus in the
SearchField
component. The default is an empty function. For example:<SearchField onBlur={event => console.log(event)} />
- onChange
func
RequiredDefault() => {}specifies a callback function for when the value in
SearchField
is changed by the user. The default is an empty function. For example:<SearchField onChange={value => console.log(value)} />
- onClear
func
RequiredDefault() => {}specifies a callback function for when the value in
SearchField
is cleared by the user. The default is an empty function. For example:<SearchField onClear={() => console.log('search cleared')} />
- onFocus
func
RequiredDefault() => {}specifies a callback function for when the user focuses in the
SearchField
component. The default is an empty function. For example:<SearchField onFocus={event => console.log(event)} />
- screenReaderText
shape
Required {label:string
Required |element
Required Required,submitButton:string
Required |element
Required Required,clearButton:}string
Required |element
Required,Default{ label: 'search', submitButton: 'submit search', clearButton: 'clear search', }specifies the screenreader text for both the clear and submit buttons (e.g., for i18n translations). The default is
{ label: 'search', clearButton: 'clear search', searchButton: 'submit search' }
. - value
string
RequiredDefault''specifies the initial value for the input. The default is an empty string.
- icons
shape
Required {submit:element
Required,clear:}element
,Default{ clear: <Icon src={Close} />, submit: <Icon src={Search} />, }specifies the icon element(s) to use for the clear and submit buttons.
- formAriaLabel
string
Requiredspecifies the aria-label attribute on the form element. This is useful if you use the
SearchField
component more than once on a page. - disabled
bool
RequiredDefaultfalseSpecifies whether the
SearchField
is disabled. - submitButtonLocation
enum
Required'internal' | 'external'Default'internal'Controls whether the search button is internal as an icon or external as a button.
- className
string
Requiredspecifies a custom class name.
- placeholder
string
Requiredspecifies the placeholder text for the input.
- children
string
Required |element
Required Requiredspecifies the label to use for the input field (e.g., for i18n translations). Note: if
children
is not provided, a screenreader-only label will be used in its placed based on thescreenReaderText.label
prop forSearchField.Advanced
.
- variant
enum
Required'light' | 'dark'Default'light'The button style variant to use.
- submitButtonLocation
enum
Required'internal' | 'external'Default'internal'Controls whether the search button is internal as an icon or external as a button.
- buttonText
string
RequiredDefault'Search'Specifies a text that is displayed on the button. The
submitButtonLocation
prop should be set toexternal
.