Search field

A search field takes a query, with the search icon already in place, and tells your code as the reader types so it can filter the results. Its input pacing decides how often a search runs: on every keystroke, once typing pauses, at a steady rate, or as often as your search can keep up. Watch the first field below gain and lose a badge, and the second report an error.

Reference docs⁠

BlazorReactWebOverviewExamplesAPIStylingAccessibility

Choosing a text field⁠

Seven components share the text field's form. Each suits a different kind of value:

  • Text field: one line of free text, such as a name, a title, or a city.
  • Text area: several lines of free text, such as a comment, a description, or a delivery note.
  • Email field: an email address, which the form checks is well formed before it is sent, with the email keyboard on a phone.
  • Password field: a secret the screen hides as it is typed, such as a password or a PIN.
  • Number field: an exact number, shown formatted for the reader's locale, such as a quantity, a price, or a percentage.
  • Phone number field: a telephone number, with the dial pad on a phone.
  • Search field: a query that filters or searches as the reader types, with the search icon in place.

Two jobs belong elsewhere. A choice from a fixed list is a select, and a number picked by feel rather than typed exactly is a slider.

Choosing a variant⁠

Three variants set how much of a container the field draws, from most to least:

  • Filled: the shipped default, with the most emphasis; suits the main search of a page, which should stand out among other content.
  • Outlined: less emphasis; suits a toolbar or form with several fields, where a lighter box keeps the layout calm.
  • Text: no container and no visible label; suits a search that sits inside a frame your layout already draws.

Built in⁠

  • The search icon sits in front of the input, so a search needs no icon of its own.
  • input-event-mode can hold back the input event until typing pauses, release it at a steady rate, or wait as long as the user's typing and your search call for. input-rate-limit-delay sets the interval, 300 milliseconds unless you change it. Without a mode, input fires on every keystroke.
  • value is current on every keystroke; only the event waits.
  • Pressing Enter in the field submits its form, so a search needs no separate submit wiring.
  • inputmode offers the search keyboard on a phone unless your app configuration says otherwise.
  • badge-value and badge-dot mark a filtered search without a separate element, in the filled and outlined variants.

Using search fields well⁠

  • Keep every field in a form or toolbar in one style, either filled or outlined.
  • Give every search field a label that names what it searches, such as "Search recipes", and put guidance in supporting-text.
  • Put a correction in error-text; it replaces the supporting text while the field is in error.
  • Slot an icon that acts, such as a clear or voice control, as a button with its own accessible name, and leave icons that only decorate unnamed.

Theming fields⁠

Set one design token and every field of that variant follows it: text fields, text areas, selects, and the email, number, password, search, and telephone fields alike.

  • --ct-field-filled-* themes filled fields, --ct-field-outlined-* outlined fields, and --ct-field-text-* fields with no container.
  • A token set on the page, or on any element that contains fields, reaches every field of its variant inside it.
  • To restyle search fields only, set the token on the element in your own CSS:
cw-search-field {
  --ct-field-outlined-corner-shape: square;
}
content_copy

The Styling tab lists every token and its default.

These rules follow Material 3 Expressive's guidance for text fields, on material.io.

Variants⁠

The field comes in three variants: filled, outlined, and text. Set variant to choose one. Omit it and the field takes the variant from your style configuration, which is filled unless you have changed it.

The text variant draws no container, no visible label, no supporting text and no counter. Its label is only the accessible name, so give it a nearby visible cue.

Labels and hints⁠

label rests in the input's place and floats above it once the field has focus or a value. It is also the accessible name. placeholder is a hint shown while the field is empty, and never names the field. supporting-text adds guidance below the field.

Icons⁠

The field draws its own search icon at the start. Content in the leading-icon slot replaces it. has-leading-icon follows the slot automatically; set it yourself only when the field is rendered on the server.

For the end of the field, use the trailing-icon slot or trailing-icon-name. If both are present, the slot wins and a warning is logged. has-trailing-icon is set the same way as its leading twin. An icon that does something belongs in the slot as a button with an accessible name.

Badges⁠

badge-value puts a short text on the field, such as the number of active filters, and badge-dot shows a dot instead. badge-concealed hides the badge while keeping its value, so clearing it shows the same badge again. The text variant draws no badge.

Forms⁠

The field takes part in forms. It submits value under name, and pressing Enter submits the owning form. A form reset restores the value attribute. autocomplete passes its token to the input, for example off to turn the browser's suggestions off.

The preview blocks form submission in some browsers, so this demo acts from the button's click. On your own page, the form submits.

Errors and limits⁠

error puts the field in its error state, and error-text replaces the supporting text while it shows. Validation also sets the state when a form submits or reportValidity() is called, never while the reader types. required, minlength, maxlength and pattern supply the rules, and maxlength adds a character counter. The second field below shows the counter.

Disabled and read-only⁠

disabled disables the field and takes it out of the Tab order. readonly shows a value the reader can select and copy but not edit. The field has no soft-disabled state.

Density⁠

density runs from 0 to 4, and each step trims the field's vertical padding. Omit it and the field takes its density from your style configuration, which is standard unless you have changed it. The text variant ignores density.

The filled variant hides its label at density 2 and above; the label stays the accessible name, so add a placeholder for the visible hint.

Input event mode⁠

input-event-mode decides when the field emits input; the four modes are immediate, debounced, throttled and adaptive. Omit it and the field emits on every keystroke, as a native input does. Only the event waits: value is current on every keystroke, and change is never paced.

input-rate-limit-delay is in milliseconds and defaults to 300. asyncSink is the function that runs your search after the field fires input, in every mode, one call at a time. Because it's a function, only code can set it. sink-duty-cycle caps how much of the search's time the field may take up, from 0.01 to 1, and defaults to 1.

Pick a mode, type a few letters quickly, and watch how far the delivered text trails what you type.

Input mode⁠

inputmode picks the virtual keyboard a phone offers. Omit it and the field offers the search keyboard, from your app configuration, which is search unless you have changed it. Set it to text when a search takes free text that the search keyboard serves badly.

Text direction⁠

text-direction sets the reading direction of the text. It suits right-to-left languages that write some content left to right, and auto lets the browser pick from the first strong character.

Properties⁠

PropertyAttributeTypeDescription
asyncSinkValueChangeSinkThe async work, such as a request to a server, that the field paces input against. It is called whenever the field delivers an input event, in every mode, and Adaptive also uses it to set how soon the next one comes. A slow sink is asked less often, and is not called once per keystroke. Read the field's value inside it, as an input listener would. See Input event mode.
autocompleteautocompletestringDescribes what, if any, type of autocomplete functionality the input should provide.See MDN: autocomplete attribute. See Forms.
badgeConcealedbadge-concealedbooleandefault falseHides the badge while keeping its value and dot setting, so clearing this property shows the same badge again. See Badges.
badgeDotbadge-dotbooleandefault falseShows the badge as a small dot with no text, whether or not badgeValue is set. See Badges.
badgeValuebadge-valuestringThe badge's text. While it is empty and badgeDot is not set, no badge renders. Ignored if badgeDot is set. See Badges.
densitydensity0, 1, 2, 3, 4DensityDensity.Standard, .Dense1, .Dense2, .Dense3, .Dense4default Density.Standard, from the style configurationThe field's density level.Ignored for Text variants. See Density.
disableddisabledbooleanWhether the element is disabled. Also reads true while a disabled <fieldset> contains it. See Disabled and read-only.
errorerrorbooleandefault falseShows the field in its error state and marks the input invalid for assistive technology.This error state overrides the error state controlled by reportValidity(). See Errors and limits.
errorTexterror-textstringThe error message that replaces supporting text when error is true. If errorText is an empty string, then the supporting text will continue to show.This error message overrides the error message displayed by reportValidity(). See Errors and limits.
formread-onlyHTMLFormElementThe form the component belongs to, or null when it has none.
hasLeadingIconhas-leading-iconbooleandefault falseWhether the field reserves space for a leading icon. Set automatically from the leading-icon slot and leadingIconName; set it yourself only when the field is rendered on the server. See Icons.
hasTrailingIconhas-trailing-iconbooleandefault falseWhether the field reserves space for a trailing icon. Set automatically from the trailing-icon slot and trailingIconName; set it yourself only when the field is rendered on the server. See Icons.
inputEventModeinput-event-modeimmediate, adaptive, debounced, throttledInputEventModeInputEventMode.Immediate, .Adaptive, .Debounced, .Throttleddefault InputEventMode.ImmediateWhen the field fires input. Debounced and Throttled pace it by inputRateLimitDelay, and Adaptive paces it to the user's own typing rhythm and to what asyncSink can keep up with. A cleared or unrecognized value is treated as the field's default. See Input event mode.
inputModeinputmodenone, decimal, email, numeric, search, tel, text, urlInputModeInputMode.None, .Decimal, .Email, .Numeric, .Search, .Tel, .Text, .Urldefault InputMode.Search, from the app configurationThe virtual keyboard to offer on a touch screen. With no inputmode attribute, the field's default input mode applies, which the application configuration can change. See Input mode.
inputRateLimitDelayinput-rate-limit-delaynumberdefault 300The pacing interval for input, in milliseconds: the pause after the last keystroke for Debounced, the minimum gap between events for Throttled, and the shortest allowed pause for Adaptive. Immediate ignores it. A value that is not a finite number is treated as the default, and a negative one as 0. See Input event mode.
labellabelstringThe field's label, which rests in the input's place and floats above it when the field has focus or a value. It is also the input's accessible name unless aria-label is set. Hidden in the filled variant at density 2 and above, where it is only the accessible name.Learn more about floating labels from the Material Design 3: text fields guidelines.For Text variants, only sets the ARIA label. See Variants, Labels and hints.
labelsread-onlyNodeListThe <label> elements associated with the element.
maxLengthmaxlengthnumberdefault -1The most characters the field accepts, or -1 for no limit. When set, a character counter shows below the field and is read as part of its description.See MDN: input maxlength attribute. See Errors and limits.
minLengthminlengthnumberdefault -1The fewest characters the value may have to pass constraint validation, checked once the user has edited it. Set to -1 for none.See MDN: input minlength attribute. See Errors and limits.
namenamestringThe name the element's value is submitted under with its form. See Forms.
patternpatternstringA regular expression that the field's value must match to pass constraint validation.See MDN: input pattern attribute. See Errors and limits.
placeholderplaceholderstringPlaceholder text for when the field is empty. Unlike label, the placeholder never floats, and it is hidden once the field has a value.See MDN: placeholder attribute. See Labels and hints, Density.
prefixTextprefix-textstringAn optional prefix to display before the input value.
readOnlyreadonlybooleandefault falseIndicates whether or not a user should be able to edit the field's value.See MDN: input readonly attribute. See Disabled and read-only.
requiredrequiredbooleandefault falseIndicates that the user must specify a value for the input before the owning form can be submitted and will render an error state when reportValidity() is invoked when value is empty. Additionally the floating label will render an asterisk "*" when true.See MDN: required attribute. See Errors and limits.
selectionEndnumberThe position where the text selection ends.
selectionStartnumberThe position where the text selection starts.
sinkDutyCyclesink-duty-cyclenumberdefault 1The share of the sink's time this field may occupy, above 0 and up to 1, in every input event mode. At 1 the next call goes out as soon as the last one finishes; at 0.25 the field leaves three quarters of the time idle. A value below 0.01 is treated as 0.01, and an assignment outside the range is ignored. See Input event mode.
suffixTextsuffix-textstringAn optional suffix to display after the input value.
supportingTextsupporting-textstringConveys additional information below the field, such as how it should be used. The text variant does not show it, but still reads it as part of the input's description. See Labels and hints.
textDirectiontext-direction"", auto, LTR, RTLTextDirectionTextDirection.Default, .Auto, .LTR, .RTLdefault TextDirection.DefaultOverride the input text CSS direction. Useful for RTL languages that use LTR notation for fractions. See Text direction.
trailingIconNametrailing-icon-namestringA trailing Material Symbols icon name. This is an alternative to using the trailing-icon slot. If both are provided, the trailing-icon slot will take precedence, and a warning will be logged. See Icons.
validationMessageread-onlystringThe message describing why the element is invalid, or an empty string when it is valid.
validityread-onlyValidityStateThe element's ValidityState.
valuevaluestringThe field's current value, always as a string. See Forms, Input event mode.
variantvariantfilled, outlined, textFieldVariantFieldVariant.Filled, .Outlined, .Textdefault FieldVariant.Filled, from the style configurationThe field's variant. Unset, the style configuration's default field variant applies, else Filled. See Variants.
willValidateread-onlybooleanWhether the element takes part in constraint validation. False while it is disabled or read-only.

Slots⁠

SlotDescription
containerCustom background content.
leading-iconThe leading icon, intended for a cw-icon or equivalent. It replaces the built-in search icon.
trailing-iconThe trailing icon, intended for a cw-icon or equivalent.

Events⁠

EventTypeDetailDescription
selectEvent—Dispatched when the user selects text in the field. It bubbles.
changeEvent—Dispatched when the user commits a change to the value, such as by leaving the field after editing it. It bubbles.
inputInputEvent—Dispatched each time the user edits the value. It bubbles and is composed.

change and select are never paced. Enter delivers a held input first, then change, then submits the owning form.

Methods⁠

MethodReturnsDescription
checkValidity()booleanChecks the element's validity and returns true if it is valid. If not, it dispatches an invalid event; nothing changes on screen.
reportValidity()booleanChecks the element's validity and returns true if it is valid. If not, it dispatches a cancelable invalid event and, unless a listener cancels it, shows validationMessage as the field's error text and focuses the field.
reset()voidRestores the value the value attribute holds, or an empty string, and clears any error reportValidity() showed.
select()voidSelects all the text in the field.See MDN: HTMLInputElement.select() and MDN: HTMLTextAreaElement.select().
setCustomValidity(error: string)voidSets a custom validation message, which makes the element invalid. An empty string clears it.
setRangeText(replacement: string, start?: number, end?: number, selectionMode?: string)voidReplaces a range of the field's text and updates value to match. With only a replacement, it replaces the current selection; with a start and end, it replaces that range.
setSelectionRange(start: number, end: number, direction?: string)voidSets the start and end positions of the selection in the field.See MDN: HTMLInputElement.setSelectionRange() and MDN: HTMLTextAreaElement.setSelectionRange().

A form reset calls reset().

Props⁠

PropTypeDescription
asyncSinkValueChangeSinkThe async work, such as a request to a server, that the field paces input against. It is called whenever the field delivers an input event, in every mode, and Adaptive also uses it to set how soon the next one comes. A slow sink is asked less often, and is not called once per keystroke. Read the field's value inside it, as an input listener would. See Input event mode.
autocompletestringDescribes what, if any, type of autocomplete functionality the input should provide.See MDN: autocomplete attribute. See Forms.
badgeConcealedbooleandefault falseHides the badge while keeping its value and dot setting, so clearing this property shows the same badge again. See Badges.
badgeDotbooleandefault falseShows the badge as a small dot with no text, whether or not badgeValue is set. See Badges.
badgeValuestringThe badge's text. While it is empty and badgeDot is not set, no badge renders. Ignored if badgeDot is set. See Badges.
densityDensityTypeDensity.Standard, .Dense1, .Dense2, .Dense3, .Dense4default Density.Standard, from the style configurationThe field's density level.Ignored for Text variants. See Density.
disabledbooleanWhether the element is disabled. Also reads true while a disabled <fieldset> contains it. See Disabled and read-only.
errorbooleandefault falseShows the field in its error state and marks the input invalid for assistive technology.This error state overrides the error state controlled by reportValidity(). See Errors and limits.
errorTextstringThe error message that replaces supporting text when error is true. If errorText is an empty string, then the supporting text will continue to show.This error message overrides the error message displayed by reportValidity(). See Errors and limits.
formread-only (ref)HTMLFormElementThe form the component belongs to, or null when it has none.
hasLeadingIconbooleandefault falseWhether the field reserves space for a leading icon. Set automatically from the slot="leading-icon" child and leadingIconName; set it yourself only when the field is rendered on the server. See Icons.
hasTrailingIconbooleandefault falseWhether the field reserves space for a trailing icon. Set automatically from the slot="trailing-icon" child and trailingIconName; set it yourself only when the field is rendered on the server. See Icons.
inputEventModeInputEventModeTypeInputEventMode.Immediate, .Adaptive, .Debounced, .Throttleddefault InputEventMode.ImmediateWhen the field fires input. Debounced and Throttled pace it by inputRateLimitDelay, and Adaptive paces it to the user's own typing rhythm and to what asyncSink can keep up with. A cleared or unrecognized value is treated as the field's default. See Input event mode.
inputModeInputModeTypeInputMode.None, .Decimal, .Email, .Numeric, .Search, .Tel, .Text, .Urldefault InputMode.Search, from the app configurationThe virtual keyboard to offer on a touch screen. With no inputMode attribute, the field's default input mode applies, which the application configuration can change. See Input mode.
inputRateLimitDelaynumberdefault 300The pacing interval for input, in milliseconds: the pause after the last keystroke for Debounced, the minimum gap between events for Throttled, and the shortest allowed pause for Adaptive. Immediate ignores it. A value that is not a finite number is treated as the default, and a negative one as 0. See Input event mode.
labelstringThe field's label, which rests in the input's place and floats above it when the field has focus or a value. It is also the input's accessible name unless aria-label is set. Hidden in the filled variant at density 2 and above, where it is only the accessible name.Learn more about floating labels from the Material Design 3: text fields guidelines.For Text variants, only sets the ARIA label. See Variants, Labels and hints.
labelsread-only (ref)NodeListThe <label> elements associated with the element.
maxLengthnumberdefault -1The most characters the field accepts, or -1 for no limit. When set, a character counter shows below the field and is read as part of its description.See MDN: input maxlength attribute. See Errors and limits.
minLengthnumberdefault -1The fewest characters the value may have to pass constraint validation, checked once the user has edited it. Set to -1 for none.See MDN: input minlength attribute. See Errors and limits.
namestringThe name the element's value is submitted under with its form. See Forms.
patternstringA regular expression that the field's value must match to pass constraint validation.See MDN: input pattern attribute. See Errors and limits.
placeholderstringPlaceholder text for when the field is empty. Unlike label, the placeholder never floats, and it is hidden once the field has a value.See MDN: placeholder attribute. See Labels and hints, Density.
prefixTextstringAn optional prefix to display before the input value.
readOnlybooleandefault falseIndicates whether or not a user should be able to edit the field's value.See MDN: input readonly attribute. See Disabled and read-only.
requiredbooleandefault falseIndicates that the user must specify a value for the input before the owning form can be submitted and will render an error state when reportValidity() is invoked when value is empty. Additionally the floating label will render an asterisk "*" when true.See MDN: required attribute. See Errors and limits.
selectionEndthrough the refnumberThe position where the text selection ends.
selectionStartthrough the refnumberThe position where the text selection starts.
sinkDutyCyclenumberdefault 1The share of the sink's time this field may occupy, above 0 and up to 1, in every input event mode. At 1 the next call goes out as soon as the last one finishes; at 0.25 the field leaves three quarters of the time idle. A value below 0.01 is treated as 0.01, and an assignment outside the range is ignored. See Input event mode.
suffixTextstringAn optional suffix to display after the input value.
supportingTextstringConveys additional information below the field, such as how it should be used. The text variant does not show it, but still reads it as part of the input's description. See Labels and hints.
textDirectionTextDirectionTypeTextDirection.Default, .Auto, .LTR, .RTLdefault TextDirection.DefaultOverride the input text CSS direction. Useful for RTL languages that use LTR notation for fractions. See Text direction.
trailingIconNamestringA trailing Material Symbols icon name. This is an alternative to using the slot="trailing-icon" child. If both are provided, the slot="trailing-icon" child will take precedence, and a warning will be logged. See Icons.
validationMessageread-only (ref)stringThe message describing why the element is invalid, or an empty string when it is valid.
validityread-only (ref)ValidityStateThe element's ValidityState.
valuestringThe field's current value, always as a string. See Forms, Input event mode.
variantFieldVariantTypeFieldVariant.Filled, .Outlined, .Textdefault FieldVariant.Filled, from the style configurationThe field's variant. Unset, the style configuration's default field variant applies, else Filled. See Variants.
willValidateread-only (ref)booleanWhether the element takes part in constraint validation. False while it is disabled or read-only.

Children⁠

ChildDescription
a child with slot="container"Custom background content.
a child with slot="leading-icon"The leading icon, intended for a CrIcon or equivalent. It replaces the built-in search icon.
a child with slot="trailing-icon"The trailing icon, intended for a CrIcon or equivalent.

Events⁠

PropArgumentDescription
onSelectEventDispatched when the user selects text in the field. It bubbles.
onChangeReact.ChangeEvent<HTMLInputElement>Dispatched when the user commits a change to the value, such as by leaving the field after editing it. It bubbles.
onInputReact.ChangeEvent<HTMLInputElement>Dispatched each time the user edits the value. It bubbles and is composed.

change and select are never paced. Enter delivers a held input first, then change, then submits the owning form.

Methods⁠

Call these on the element the ref holds.

MethodReturnsDescription
checkValidity()booleanChecks the element's validity and returns true if it is valid. If not, it dispatches an invalid event; nothing changes on screen.
reportValidity()booleanChecks the element's validity and returns true if it is valid. If not, it dispatches a cancelable invalid event and, unless a listener cancels it, shows validationMessage as the field's error text and focuses the field.
reset()voidRestores the value the value attribute holds, or an empty string, and clears any error reportValidity() showed.
select()voidSelects all the text in the field.See MDN: HTMLInputElement.select() and MDN: HTMLTextAreaElement.select().
setCustomValidity(error: string)voidSets a custom validation message, which makes the element invalid. An empty string clears it.
setRangeText(replacement: string, start?: number, end?: number, selectionMode?: string)voidReplaces a range of the field's text and updates value to match. With only a replacement, it replaces the current selection; with a start and end, it replaces that range.
setSelectionRange(start: number, end: number, direction?: string)voidSets the start and end positions of the selection in the field.See MDN: HTMLInputElement.setSelectionRange() and MDN: HTMLTextAreaElement.setSelectionRange().

A form reset calls reset().

Parameters⁠

ParameterTypeDescription
AsyncSinkValueChangeSink?The async work, such as a request to a server, that the field paces input against. It is called whenever the field delivers an input event, in every mode, and Adaptive also uses it to set how soon the next one comes. A slow sink is asked less often, and is not called once per keystroke. Read the field's value inside it, as an input listener would. See Input event mode.
Autocompletestring?Describes what, if any, type of autocomplete functionality the input should provide.See MDN: autocomplete attribute. See Forms.
BadgeConcealedbool?default falseHides the badge while keeping its value and dot setting, so clearing this property shows the same badge again. See Badges.
BadgeDotbool?default falseShows the badge as a small dot with no text, whether or not BadgeValue is set. See Badges.
BadgeValuestring?The badge's text. While it is empty and BadgeDot is not set, no badge renders. Ignored if BadgeDot is set. See Badges.
DensityDensity?Density.Standard, .Dense1, .Dense2, .Dense3, .Dense4default Density.Standard, from the style configurationThe field's density level.Ignored for Text variants. See Density.
Disabledbool?Whether the element is disabled. Also reads true while a disabled <fieldset> contains it. See Disabled and read-only.
Errorbool?default falseShows the field in its error state and marks the input invalid for assistive technology.This error state overrides the error state controlled by reportValidity(). See Errors and limits.
ErrorTextstring?The error message that replaces supporting text when Error is true. If ErrorText is an empty string, then the supporting text will continue to show.This error message overrides the error message displayed by reportValidity(). See Errors and limits.
HasLeadingIconbool?default falseWhether the field reserves space for a leading icon. Set automatically from the LeadingIcon render fragment and leadingIconName; set it yourself only when the field is rendered on the server. See Icons.
HasTrailingIconbool?default falseWhether the field reserves space for a trailing icon. Set automatically from the TrailingIcon render fragment and TrailingIconName; set it yourself only when the field is rendered on the server. See Icons.
InputEventModeInputEventMode?InputEventMode.Immediate, .Adaptive, .Debounced, .Throttleddefault InputEventMode.ImmediateWhen the field fires input. Debounced and Throttled pace it by InputRateLimitDelay, and Adaptive paces it to the user's own typing rhythm and to what AsyncSink can keep up with. A cleared or unrecognized value is treated as the field's default. See Input event mode.
InputModeInputMode?InputMode.None, .Decimal, .Email, .Numeric, .Search, .Tel, .Text, .Urldefault InputMode.Search, from the app configurationThe virtual keyboard to offer on a touch screen. With no InputMode attribute, the field's default input mode applies, which the application configuration can change. See Input mode.
InputRateLimitDelayint?default 300The pacing interval for input, in milliseconds: the pause after the last keystroke for Debounced, the minimum gap between events for Throttled, and the shortest allowed pause for Adaptive. Immediate ignores it. A value that is not a finite number is treated as the default, and a negative one as 0. See Input event mode.
Labelstring?The field's label, which rests in the input's place and floats above it when the field has focus or a value. It is also the input's accessible name unless aria-label is set. Hidden in the filled variant at density 2 and above, where it is only the accessible name.Learn more about floating labels from the Material Design 3: text fields guidelines.For Text variants, only sets the ARIA label. See Variants, Labels and hints.
MaxLengthint?default -1The most characters the field accepts, or -1 for no limit. When set, a character counter shows below the field and is read as part of its description.See MDN: input maxlength attribute. See Errors and limits.
MinLengthint?default -1The fewest characters the value may have to pass constraint validation, checked once the user has edited it. Set to -1 for none.See MDN: input minlength attribute. See Errors and limits.
Namestring?The name the element's value is submitted under with its form. See Forms.
Patternstring?A regular expression that the field's value must match to pass constraint validation.See MDN: input pattern attribute. See Errors and limits.
Placeholderstring?Placeholder text for when the field is empty. Unlike Label, the placeholder never floats, and it is hidden once the field has a value.See MDN: placeholder attribute. See Labels and hints, Density.
PrefixTextstring?An optional prefix to display before the input value.
ReadOnlybool?default falseIndicates whether or not a user should be able to edit the field's value.See MDN: input readonly attribute. See Disabled and read-only.
Requiredbool?default falseIndicates that the user must specify a value for the input before the owning form can be submitted and will render an error state when reportValidity() is invoked when value is empty. Additionally the floating label will render an asterisk "*" when true.See MDN: required attribute. See Errors and limits.
SinkDutyCycledouble?default 1The share of the sink's time this field may occupy, above 0 and up to 1, in every input event mode. At 1 the next call goes out as soon as the last one finishes; at 0.25 the field leaves three quarters of the time idle. A value below 0.01 is treated as 0.01, and an assignment outside the range is ignored. See Input event mode.
SuffixTextstring?An optional suffix to display after the input value.
SupportingTextstring?Conveys additional information below the field, such as how it should be used. The text variant does not show it, but still reads it as part of the input's description. See Labels and hints.
TextDirectionTextDirection?TextDirection.Default, .Auto, .LTR, .RTLdefault TextDirection.DefaultOverride the input text CSS direction. Useful for RTL languages that use LTR notation for fractions. See Text direction.
TrailingIconNamestring?A trailing Material Symbols icon name. This is an alternative to using the TrailingIcon render fragment. If both are provided, the TrailingIcon render fragment will take precedence, and a warning will be logged. See Icons.
Valuestring?The field's current value, always as a string. See Forms, Input event mode.
ValueExpressionExpression<Func<string>>?Gets or sets an expression that identifies the bound value.
VariantFieldVariant?FieldVariant.Filled, .Outlined, .Textdefault FieldVariant.Filled, from the style configurationThe field's variant. Unset, the style configuration's default field variant applies, else Filled. See Variants.

Render fragments⁠

ParameterTypeDescription
ContainerRenderFragment?Custom background content.
LeadingIconRenderFragment?The leading icon, intended for a CbIcon or equivalent. It replaces the built-in search icon.
TrailingIconRenderFragment?The trailing icon, intended for a CbIcon or equivalent.

Event callbacks⁠

ParameterTypeDescription
OnSelectEventCallbackDispatched when the user selects text in the field. It bubbles.
OnChangeEventCallback<ChangeEventArgs>Dispatched when the user commits a change to the value, such as by leaving the field after editing it. It bubbles.
OnInputEventCallback<ChangeEventArgs>Dispatched each time the user edits the value. It bubbles and is composed.

change and select are never paced. Enter delivers a held input first, then change, then submits the owning form.

Inputs⁠

InputTypeDescription
asyncSinkValueChangeSinkThe async work, such as a request to a server, that the field paces input against. It is called whenever the field delivers an input event, in every mode, and Adaptive also uses it to set how soon the next one comes. A slow sink is asked less often, and is not called once per keystroke. Read the field's value inside it, as an input listener would. See Input event mode.
autocompletestringDescribes what, if any, type of autocomplete functionality the input should provide.See MDN: autocomplete attribute. See Forms.
badgeConcealedbooleandefault falseHides the badge while keeping its value and dot setting, so clearing this property shows the same badge again. See Badges.
badgeDotbooleandefault falseShows the badge as a small dot with no text, whether or not badgeValue is set. See Badges.
badgeValuestringThe badge's text. While it is empty and badgeDot is not set, no badge renders. Ignored if badgeDot is set. See Badges.
densityDensityTypeDensity.Standard, .Dense1, .Dense2, .Dense3, .Dense4default Density.Standard, from the style configurationThe field's density level.Ignored for Text variants. See Density.
disabledbooleanWhether the element is disabled. Also reads true while a disabled <fieldset> contains it. See Disabled and read-only.
errorbooleandefault falseShows the field in its error state and marks the input invalid for assistive technology.This error state overrides the error state controlled by reportValidity(). See Errors and limits.
errorTextstringThe error message that replaces supporting text when error is true. If errorText is an empty string, then the supporting text will continue to show.This error message overrides the error message displayed by reportValidity(). See Errors and limits.
hasLeadingIconbooleandefault falseWhether the field reserves space for a leading icon. Set automatically from the leading-icon slot and leadingIconName; set it yourself only when the field is rendered on the server. See Icons.
hasTrailingIconbooleandefault falseWhether the field reserves space for a trailing icon. Set automatically from the trailing-icon slot and trailingIconName; set it yourself only when the field is rendered on the server. See Icons.
inputEventModeInputEventModeTypeInputEventMode.Immediate, .Adaptive, .Debounced, .Throttleddefault InputEventMode.ImmediateWhen the field fires input. Debounced and Throttled pace it by inputRateLimitDelay, and Adaptive paces it to the user's own typing rhythm and to what asyncSink can keep up with. A cleared or unrecognized value is treated as the field's default. See Input event mode.
inputModeInputModeTypeInputMode.None, .Decimal, .Email, .Numeric, .Search, .Tel, .Text, .Urldefault InputMode.Search, from the app configurationThe virtual keyboard to offer on a touch screen. With no inputMode attribute, the field's default input mode applies, which the application configuration can change. See Input mode.
inputRateLimitDelaynumberdefault 300The pacing interval for input, in milliseconds: the pause after the last keystroke for Debounced, the minimum gap between events for Throttled, and the shortest allowed pause for Adaptive. Immediate ignores it. A value that is not a finite number is treated as the default, and a negative one as 0. See Input event mode.
labelstringThe field's label, which rests in the input's place and floats above it when the field has focus or a value. It is also the input's accessible name unless aria-label is set. Hidden in the filled variant at density 2 and above, where it is only the accessible name.Learn more about floating labels from the Material Design 3: text fields guidelines.For Text variants, only sets the ARIA label. See Variants, Labels and hints.
maxLengthnumberdefault -1The most characters the field accepts, or -1 for no limit. When set, a character counter shows below the field and is read as part of its description.See MDN: input maxlength attribute. See Errors and limits.
minLengthnumberdefault -1The fewest characters the value may have to pass constraint validation, checked once the user has edited it. Set to -1 for none.See MDN: input minlength attribute. See Errors and limits.
namestringThe name the element's value is submitted under with its form. See Forms.
patternstringA regular expression that the field's value must match to pass constraint validation.See MDN: input pattern attribute. See Errors and limits.
placeholderstringPlaceholder text for when the field is empty. Unlike label, the placeholder never floats, and it is hidden once the field has a value.See MDN: placeholder attribute. See Labels and hints, Density.
prefixTextstringAn optional prefix to display before the input value.
readOnlybooleandefault falseIndicates whether or not a user should be able to edit the field's value.See MDN: input readonly attribute. See Disabled and read-only.
requiredbooleandefault falseIndicates that the user must specify a value for the input before the owning form can be submitted and will render an error state when reportValidity() is invoked when value is empty. Additionally the floating label will render an asterisk "*" when true.See MDN: required attribute. See Errors and limits.
sinkDutyCyclenumberdefault 1The share of the sink's time this field may occupy, above 0 and up to 1, in every input event mode. At 1 the next call goes out as soon as the last one finishes; at 0.25 the field leaves three quarters of the time idle. A value below 0.01 is treated as 0.01, and an assignment outside the range is ignored. See Input event mode.
suffixTextstringAn optional suffix to display after the input value.
supportingTextstringConveys additional information below the field, such as how it should be used. The text variant does not show it, but still reads it as part of the input's description. See Labels and hints.
textDirectionTextDirectionTypeTextDirection.Default, .Auto, .LTR, .RTLdefault TextDirection.DefaultOverride the input text CSS direction. Useful for RTL languages that use LTR notation for fractions. See Text direction.
trailingIconNamestringA trailing Material Symbols icon name. This is an alternative to using the trailing-icon slot. If both are provided, the trailing-icon slot will take precedence, and a warning will be logged. See Icons.
valuestringThe field's current value, always as a string. See Forms, Input event mode.
variantFieldVariantTypeFieldVariant.Filled, .Outlined, .Textdefault FieldVariant.Filled, from the style configurationThe field's variant. Unset, the style configuration's default field variant applies, else Filled. See Variants.

Content projection⁠

ContentDescription
an element with slot="container"Custom background content.
an element with slot="leading-icon"The leading icon, intended for a CaIcon or equivalent. It replaces the built-in search icon.
an element with slot="trailing-icon"The trailing icon, intended for a CaIcon or equivalent.

Outputs⁠

OutputEventDescription
cwSelectEventDispatched when the user selects text in the field. It bubbles.
cwChangeEventDispatched when the user commits a change to the value, such as by leaving the field after editing it. It bubbles.
cwInputInputEventDispatched each time the user edits the value. It bubbles and is composed.

change and select are never paced. Enter delivers a held input first, then change, then submits the owning form.

Props⁠

PropTypeDescription
asyncSinkValueChangeSinkThe async work, such as a request to a server, that the field paces input against. It is called whenever the field delivers an input event, in every mode, and Adaptive also uses it to set how soon the next one comes. A slow sink is asked less often, and is not called once per keystroke. Read the field's value inside it, as an input listener would. See Input event mode.
autocompletestringDescribes what, if any, type of autocomplete functionality the input should provide.See MDN: autocomplete attribute. See Forms.
badgeConcealedbooleandefault falseHides the badge while keeping its value and dot setting, so clearing this property shows the same badge again. See Badges.
badgeDotbooleandefault falseShows the badge as a small dot with no text, whether or not badgeValue is set. See Badges.
badgeValuestringThe badge's text. While it is empty and badgeDot is not set, no badge renders. Ignored if badgeDot is set. See Badges.
densityDensityTypeDensity.Standard, .Dense1, .Dense2, .Dense3, .Dense4default Density.Standard, from the style configurationThe field's density level.Ignored for Text variants. See Density.
disabledbooleanWhether the element is disabled. Also reads true while a disabled <fieldset> contains it. See Disabled and read-only.
errorbooleandefault falseShows the field in its error state and marks the input invalid for assistive technology.This error state overrides the error state controlled by reportValidity(). See Errors and limits.
errorTextstringThe error message that replaces supporting text when error is true. If errorText is an empty string, then the supporting text will continue to show.This error message overrides the error message displayed by reportValidity(). See Errors and limits.
hasLeadingIconbooleandefault falseWhether the field reserves space for a leading icon. Set automatically from the leading-icon slot and leadingIconName; set it yourself only when the field is rendered on the server. See Icons.
hasTrailingIconbooleandefault falseWhether the field reserves space for a trailing icon. Set automatically from the trailing-icon slot and trailingIconName; set it yourself only when the field is rendered on the server. See Icons.
inputEventModeInputEventModeTypeInputEventMode.Immediate, .Adaptive, .Debounced, .Throttleddefault InputEventMode.ImmediateWhen the field fires input. Debounced and Throttled pace it by inputRateLimitDelay, and Adaptive paces it to the user's own typing rhythm and to what asyncSink can keep up with. A cleared or unrecognized value is treated as the field's default. See Input event mode.
inputModeInputModeTypeInputMode.None, .Decimal, .Email, .Numeric, .Search, .Tel, .Text, .Urldefault InputMode.Search, from the app configurationThe virtual keyboard to offer on a touch screen. With no inputMode attribute, the field's default input mode applies, which the application configuration can change. See Input mode.
inputRateLimitDelaynumberdefault 300The pacing interval for input, in milliseconds: the pause after the last keystroke for Debounced, the minimum gap between events for Throttled, and the shortest allowed pause for Adaptive. Immediate ignores it. A value that is not a finite number is treated as the default, and a negative one as 0. See Input event mode.
labelstringThe field's label, which rests in the input's place and floats above it when the field has focus or a value. It is also the input's accessible name unless aria-label is set. Hidden in the filled variant at density 2 and above, where it is only the accessible name.Learn more about floating labels from the Material Design 3: text fields guidelines.For Text variants, only sets the ARIA label. See Variants, Labels and hints.
maxLengthnumberdefault -1The most characters the field accepts, or -1 for no limit. When set, a character counter shows below the field and is read as part of its description.See MDN: input maxlength attribute. See Errors and limits.
minLengthnumberdefault -1The fewest characters the value may have to pass constraint validation, checked once the user has edited it. Set to -1 for none.See MDN: input minlength attribute. See Errors and limits.
namestringThe name the element's value is submitted under with its form. See Forms.
patternstringA regular expression that the field's value must match to pass constraint validation.See MDN: input pattern attribute. See Errors and limits.
placeholderstringPlaceholder text for when the field is empty. Unlike label, the placeholder never floats, and it is hidden once the field has a value.See MDN: placeholder attribute. See Labels and hints, Density.
prefixTextstringAn optional prefix to display before the input value.
readOnlybooleandefault falseIndicates whether or not a user should be able to edit the field's value.See MDN: input readonly attribute. See Disabled and read-only.
requiredbooleandefault falseIndicates that the user must specify a value for the input before the owning form can be submitted and will render an error state when reportValidity() is invoked when value is empty. Additionally the floating label will render an asterisk "*" when true.See MDN: required attribute. See Errors and limits.
sinkDutyCyclenumberdefault 1The share of the sink's time this field may occupy, above 0 and up to 1, in every input event mode. At 1 the next call goes out as soon as the last one finishes; at 0.25 the field leaves three quarters of the time idle. A value below 0.01 is treated as 0.01, and an assignment outside the range is ignored. See Input event mode.
suffixTextstringAn optional suffix to display after the input value.
supportingTextstringConveys additional information below the field, such as how it should be used. The text variant does not show it, but still reads it as part of the input's description. See Labels and hints.
textDirectionTextDirectionTypeTextDirection.Default, .Auto, .LTR, .RTLdefault TextDirection.DefaultOverride the input text CSS direction. Useful for RTL languages that use LTR notation for fractions. See Text direction.
trailingIconNamestringA trailing Material Symbols icon name. This is an alternative to using the trailing-icon slot. If both are provided, the trailing-icon slot will take precedence, and a warning will be logged. See Icons.
valuestringThe field's current value, always as a string. See Forms, Input event mode.
variantFieldVariantTypeFieldVariant.Filled, .Outlined, .Textdefault FieldVariant.Filled, from the style configurationThe field's variant. Unset, the style configuration's default field variant applies, else Filled. See Variants.

Slots⁠

SlotDescription
containerCustom background content.
leading-iconThe leading icon, intended for a CvIcon or equivalent. It replaces the built-in search icon.
trailing-iconThe trailing icon, intended for a CvIcon or equivalent.

Events⁠

EventTypeDescription
selectEventDispatched when the user selects text in the field. It bubbles.
changeEventDispatched when the user commits a change to the value, such as by leaving the field after editing it. It bubbles.
inputInputEventDispatched each time the user edits the value. It bubbles and is composed.

change and select are never paced. Enter delivers a held input first, then change, then submits the owning form.

Props⁠

PropTypeDescription
asyncSinkValueChangeSinkThe async work, such as a request to a server, that the field paces input against. It is called whenever the field delivers an input event, in every mode, and Adaptive also uses it to set how soon the next one comes. A slow sink is asked less often, and is not called once per keystroke. Read the field's value inside it, as an input listener would. See Input event mode.
autocompletestringDescribes what, if any, type of autocomplete functionality the input should provide.See MDN: autocomplete attribute. See Forms.
badgeConcealedbooleandefault falseHides the badge while keeping its value and dot setting, so clearing this property shows the same badge again. See Badges.
badgeDotbooleandefault falseShows the badge as a small dot with no text, whether or not badgeValue is set. See Badges.
badgeValuestringThe badge's text. While it is empty and badgeDot is not set, no badge renders. Ignored if badgeDot is set. See Badges.
densityDensityTypeDensity.Standard, .Dense1, .Dense2, .Dense3, .Dense4default Density.Standard, from the style configurationThe field's density level.Ignored for Text variants. See Density.
disabledbooleanWhether the element is disabled. Also reads true while a disabled <fieldset> contains it. See Disabled and read-only.
errorbooleandefault falseShows the field in its error state and marks the input invalid for assistive technology.This error state overrides the error state controlled by reportValidity(). See Errors and limits.
errorTextstringThe error message that replaces supporting text when error is true. If errorText is an empty string, then the supporting text will continue to show.This error message overrides the error message displayed by reportValidity(). See Errors and limits.
hasLeadingIconbooleandefault falseWhether the field reserves space for a leading icon. Set automatically from the leadingIconSnippet snippet and leadingIconName; set it yourself only when the field is rendered on the server. See Icons.
hasTrailingIconbooleandefault falseWhether the field reserves space for a trailing icon. Set automatically from the trailingIconSnippet snippet and trailingIconName; set it yourself only when the field is rendered on the server. See Icons.
inputEventModeInputEventModeTypeInputEventMode.Immediate, .Adaptive, .Debounced, .Throttleddefault InputEventMode.ImmediateWhen the field fires input. Debounced and Throttled pace it by inputRateLimitDelay, and Adaptive paces it to the user's own typing rhythm and to what asyncSink can keep up with. A cleared or unrecognized value is treated as the field's default. See Input event mode.
inputModeInputModeTypeInputMode.None, .Decimal, .Email, .Numeric, .Search, .Tel, .Text, .Urldefault InputMode.Search, from the app configurationThe virtual keyboard to offer on a touch screen. With no inputMode attribute, the field's default input mode applies, which the application configuration can change. See Input mode.
inputRateLimitDelaynumberdefault 300The pacing interval for input, in milliseconds: the pause after the last keystroke for Debounced, the minimum gap between events for Throttled, and the shortest allowed pause for Adaptive. Immediate ignores it. A value that is not a finite number is treated as the default, and a negative one as 0. See Input event mode.
labelstringThe field's label, which rests in the input's place and floats above it when the field has focus or a value. It is also the input's accessible name unless aria-label is set. Hidden in the filled variant at density 2 and above, where it is only the accessible name.Learn more about floating labels from the Material Design 3: text fields guidelines.For Text variants, only sets the ARIA label. See Variants, Labels and hints.
maxLengthnumberdefault -1The most characters the field accepts, or -1 for no limit. When set, a character counter shows below the field and is read as part of its description.See MDN: input maxlength attribute. See Errors and limits.
minLengthnumberdefault -1The fewest characters the value may have to pass constraint validation, checked once the user has edited it. Set to -1 for none.See MDN: input minlength attribute. See Errors and limits.
namestringThe name the element's value is submitted under with its form. See Forms.
patternstringA regular expression that the field's value must match to pass constraint validation.See MDN: input pattern attribute. See Errors and limits.
placeholderstringPlaceholder text for when the field is empty. Unlike label, the placeholder never floats, and it is hidden once the field has a value.See MDN: placeholder attribute. See Labels and hints, Density.
prefixTextstringAn optional prefix to display before the input value.
readOnlybooleandefault falseIndicates whether or not a user should be able to edit the field's value.See MDN: input readonly attribute. See Disabled and read-only.
requiredbooleandefault falseIndicates that the user must specify a value for the input before the owning form can be submitted and will render an error state when reportValidity() is invoked when value is empty. Additionally the floating label will render an asterisk "*" when true.See MDN: required attribute. See Errors and limits.
sinkDutyCyclenumberdefault 1The share of the sink's time this field may occupy, above 0 and up to 1, in every input event mode. At 1 the next call goes out as soon as the last one finishes; at 0.25 the field leaves three quarters of the time idle. A value below 0.01 is treated as 0.01, and an assignment outside the range is ignored. See Input event mode.
suffixTextstringAn optional suffix to display after the input value.
supportingTextstringConveys additional information below the field, such as how it should be used. The text variant does not show it, but still reads it as part of the input's description. See Labels and hints.
textDirectionTextDirectionTypeTextDirection.Default, .Auto, .LTR, .RTLdefault TextDirection.DefaultOverride the input text CSS direction. Useful for RTL languages that use LTR notation for fractions. See Text direction.
trailingIconNamestringA trailing Material Symbols icon name. This is an alternative to using the trailingIconSnippet snippet. If both are provided, the trailingIconSnippet snippet will take precedence, and a warning will be logged. See Icons.
valuestringThe field's current value, always as a string. See Forms, Input event mode.
variantFieldVariantTypeFieldVariant.Filled, .Outlined, .Textdefault FieldVariant.Filled, from the style configurationThe field's variant. Unset, the style configuration's default field variant applies, else Filled. See Variants.

Snippets⁠

SnippetDescription
containerSnippetCustom background content.
leadingIconSnippetThe leading icon, intended for a CsIcon or equivalent. It replaces the built-in search icon.
trailingIconSnippetThe trailing icon, intended for a CsIcon or equivalent.

Events⁠

PropTypeDescription
onSelectEventDispatched when the user selects text in the field. It bubbles.
onChangeEventDispatched when the user commits a change to the value, such as by leaving the field after editing it. It bubbles.
onInputInputEventDispatched each time the user edits the value. It bubbles and is composed.

change and select are never paced. Enter delivers a held input first, then change, then submits the owning form.

Each attribute value has its own tokens; a cell shows its token's value, and selecting the cell shows the token's fallback path, with each name and value ready to copy. For example, the filled column's active-indicator-color row is --ct-field-filled-active-indicator-color, which defaults to --ct-sys-color-on-surface-variant.

Variant⁠

Namefilledoutlinedtext
active-indicator-color--ct-sys-color-on-surface-variant --ct-field-filled-active-indicator-color——
active-indicator-height1px --ct-field-filled-active-indicator-height——
bottom-space16px --ct-field-filled-bottom-space16px --ct-field-outlined-bottom-space—
caret-color--ct-sys-color-primary --ct-field-filled-caret-color--ct-sys-color-primary --ct-field-outlined-caret-color--ct-sys-color-primary --ct-field-text-caret-color
container-color--ct-sys-color-surface-container-highest --ct-field-filled-container-color——
container-end-end-radius—--ct-sys-corner-radius-extra-small --ct-field-outlined-container-end-end-radius—
container-end-start-radius—--ct-sys-corner-radius-extra-small --ct-field-outlined-container-end-start-radius—
container-start-end-radius--ct-sys-corner-radius-extra-small --ct-field-filled-container-start-end-radius--ct-sys-corner-radius-extra-small --ct-field-outlined-container-start-end-radius—
container-start-start-radius--ct-sys-corner-radius-extra-small --ct-field-filled-container-start-start-radius--ct-sys-corner-radius-extra-small --ct-field-outlined-container-start-start-radius—
content-color--ct-sys-color-on-surface --ct-field-filled-content-color--ct-sys-color-on-surface --ct-field-outlined-content-color--ct-sys-color-on-surface --ct-field-text-content-color
content-font--ct-sys-typescale-body-large-font --ct-field-filled-content-font--ct-sys-typescale-body-large-font --ct-field-outlined-content-font--ct-sys-typescale-body-large-font --ct-field-text-content-font
content-line-height--ct-sys-typescale-body-large-line-height --ct-field-filled-content-line-height--ct-sys-typescale-body-large-line-height --ct-field-outlined-content-line-height--ct-sys-typescale-body-large-line-height --ct-field-text-content-line-height
content-placeholder-color--ct-sys-color-on-surface-variant --ct-field-filled-content-placeholder-color--ct-sys-color-on-surface-variant --ct-field-outlined-content-placeholder-color--ct-sys-color-on-surface-variant --ct-field-text-content-placeholder-color
content-prefix-color--ct-sys-color-on-surface-variant --ct-field-filled-content-prefix-color--ct-sys-color-on-surface-variant --ct-field-outlined-content-prefix-color--ct-sys-color-on-surface-variant --ct-field-text-content-prefix-color
content-prefix-trailing-space2px --ct-field-filled-content-prefix-trailing-space2px --ct-field-outlined-content-prefix-trailing-space2px --ct-field-text-content-prefix-trailing-space
content-size--ct-sys-typescale-body-large-size --ct-field-filled-content-size--ct-sys-typescale-body-large-size --ct-field-outlined-content-size--ct-sys-typescale-body-large-size --ct-field-text-content-size
content-space16px --ct-field-filled-content-space16px --ct-field-outlined-content-space—
content-suffix-color--ct-sys-color-on-surface-variant --ct-field-filled-content-suffix-color--ct-sys-color-on-surface-variant --ct-field-outlined-content-suffix-color--ct-sys-color-on-surface-variant --ct-field-text-content-suffix-color
content-suffix-leading-space2px --ct-field-filled-content-suffix-leading-space2px --ct-field-outlined-content-suffix-leading-space2px --ct-field-text-content-suffix-leading-space
content-tracking--ct-sys-typescale-body-large-tracking --ct-field-filled-content-tracking--ct-sys-typescale-body-large-tracking --ct-field-outlined-content-tracking--ct-sys-typescale-body-large-tracking --ct-field-text-content-tracking
content-weight--ct-sys-typescale-body-large-weight --ct-field-filled-content-weight--ct-sys-typescale-body-large-weight --ct-field-outlined-content-weight--ct-sys-typescale-body-large-weight --ct-field-text-content-weight
label-text-color--ct-sys-color-on-surface-variant --ct-field-filled-label-text-color--ct-sys-color-on-surface-variant --ct-field-outlined-label-text-color—
label-text-font--ct-sys-typescale-body-large-font --ct-field-filled-label-text-font--ct-sys-typescale-body-large-font --ct-field-outlined-label-text-font—
label-text-line-height--ct-sys-typescale-body-large-line-height --ct-field-filled-label-text-line-height--ct-sys-typescale-body-large-line-height --ct-field-outlined-label-text-line-height—
label-text-padding-bottom—8px --ct-field-outlined-label-text-padding-bottom—
label-text-populated-line-height--ct-sys-typescale-body-small-line-height --ct-field-filled-label-text-populated-line-height--ct-sys-typescale-body-small-line-height --ct-field-outlined-label-text-populated-line-height—
label-text-populated-size--ct-sys-typescale-body-small-size --ct-field-filled-label-text-populated-size--ct-sys-typescale-body-small-size --ct-field-outlined-label-text-populated-size—
label-text-size--ct-sys-typescale-body-large-size --ct-field-filled-label-text-size--ct-sys-typescale-body-large-size --ct-field-outlined-label-text-size—
label-text-weight--ct-sys-typescale-body-large-weight --ct-field-filled-label-text-weight--ct-sys-typescale-body-large-weight --ct-field-outlined-label-text-weight—
leading-content-color--ct-sys-color-on-surface-variant --ct-field-filled-leading-content-color--ct-sys-color-on-surface-variant --ct-field-outlined-leading-content-color—
leading-content-size24px --ct-field-filled-leading-content-size24px --ct-field-outlined-leading-content-size24px --ct-field-text-leading-content-size
leading-space16px --ct-field-filled-leading-space16px --ct-field-outlined-leading-space—
outline-color—--ct-sys-color-outline --ct-field-outlined-outline-color—
outline-label-padding—4px --ct-field-outlined-outline-label-padding—
outline-width—1px --ct-field-outlined-outline-width—
supporting-text-color--ct-sys-color-on-surface-variant --ct-field-filled-supporting-text-color--ct-sys-color-on-surface-variant --ct-field-outlined-supporting-text-color—
supporting-text-font--ct-sys-typescale-body-small-font --ct-field-filled-supporting-text-font--ct-sys-typescale-body-small-font --ct-field-outlined-supporting-text-font—
supporting-text-leading-space16px --ct-field-filled-supporting-text-leading-space16px --ct-field-outlined-supporting-text-leading-space—
supporting-text-line-height--ct-sys-typescale-body-small-line-height --ct-field-filled-supporting-text-line-height--ct-sys-typescale-body-small-line-height --ct-field-outlined-supporting-text-line-height—
supporting-text-size--ct-sys-typescale-body-small-size --ct-field-filled-supporting-text-size--ct-sys-typescale-body-small-size --ct-field-outlined-supporting-text-size—
supporting-text-top-space4px --ct-field-filled-supporting-text-top-space4px --ct-field-outlined-supporting-text-top-space—
supporting-text-tracking--ct-sys-typescale-body-small-tracking --ct-field-filled-supporting-text-tracking--ct-sys-typescale-body-small-tracking --ct-field-outlined-supporting-text-tracking—
supporting-text-trailing-space16px --ct-field-filled-supporting-text-trailing-space16px --ct-field-outlined-supporting-text-trailing-space—
supporting-text-weight--ct-sys-typescale-body-small-weight --ct-field-filled-supporting-text-weight--ct-sys-typescale-body-small-weight --ct-field-outlined-supporting-text-weight—
top-space16px --ct-field-filled-top-space16px --ct-field-outlined-top-space—
trailing-content-color--ct-sys-color-on-surface-variant --ct-field-filled-trailing-content-color--ct-sys-color-on-surface-variant --ct-field-outlined-trailing-content-color—
trailing-content-size24px --ct-field-filled-trailing-content-size24px --ct-field-outlined-trailing-content-size24px --ct-field-text-trailing-content-size
trailing-space16px --ct-field-filled-trailing-space16px --ct-field-outlined-trailing-space—
with-label-bottom-space8px --ct-field-filled-with-label-bottom-space——
with-label-top-space8px --ct-field-filled-with-label-top-space——
with-leading-content-leading-space12px --ct-field-filled-with-leading-content-leading-space12px --ct-field-outlined-with-leading-content-leading-space—
with-trailing-content-trailing-space12px --ct-field-filled-with-trailing-content-trailing-space12px --ct-field-outlined-with-trailing-content-trailing-space—
hover-active-indicator-color--ct-sys-color-on-surface --ct-field-filled-hover-active-indicator-color——
hover-active-indicator-height1px --ct-field-filled-hover-active-indicator-height——
hover-content-color--ct-sys-color-on-surface --ct-field-filled-hover-content-color--ct-sys-color-on-surface --ct-field-outlined-hover-content-color—
hover-label-text-color--ct-sys-color-on-surface-variant --ct-field-filled-hover-label-text-color--ct-sys-color-on-surface-variant --ct-field-outlined-hover-label-text-color—
hover-leading-content-color--ct-sys-color-on-surface-variant --ct-field-filled-hover-leading-content-color--ct-sys-color-on-surface-variant --ct-field-outlined-hover-leading-content-color—
hover-outline-color—--ct-sys-color-on-surface --ct-field-outlined-hover-outline-color—
hover-outline-width—1px --ct-field-outlined-hover-outline-width—
hover-state-layer-color--ct-sys-color-on-surface --ct-field-filled-hover-state-layer-color--ct-sys-color-on-surface --ct-field-outlined-hover-state-layer-color—
hover-state-layer-opacity--ct-sys-state-hover-state-layer-opacity --ct-field-filled-hover-state-layer-opacity--ct-sys-state-hover-state-layer-opacity --ct-field-outlined-hover-state-layer-opacity—
hover-supporting-text-color--ct-sys-color-on-surface-variant --ct-field-filled-hover-supporting-text-color--ct-sys-color-on-surface-variant --ct-field-outlined-hover-supporting-text-color—
hover-trailing-content-color--ct-sys-color-on-surface-variant --ct-field-filled-hover-trailing-content-color--ct-sys-color-on-surface-variant --ct-field-outlined-hover-trailing-content-color—
focus-active-indicator-color--ct-sys-color-primary --ct-field-filled-focus-active-indicator-color——
focus-active-indicator-height3px --ct-field-filled-focus-active-indicator-height——
focus-caret-color--ct-sys-color-primary --ct-field-filled-focus-caret-color--ct-sys-color-primary --ct-field-outlined-focus-caret-color--ct-sys-color-primary --ct-field-text-focus-caret-color
focus-content-color--ct-sys-color-on-surface --ct-field-filled-focus-content-color--ct-sys-color-on-surface --ct-field-outlined-focus-content-color—
focus-label-text-color--ct-sys-color-primary --ct-field-filled-focus-label-text-color--ct-sys-color-primary --ct-field-outlined-focus-label-text-color—
focus-leading-content-color--ct-sys-color-on-surface-variant --ct-field-filled-focus-leading-content-color--ct-sys-color-on-surface-variant --ct-field-outlined-focus-leading-content-color—
focus-outline-color—--ct-sys-color-primary --ct-field-outlined-focus-outline-color--ct-sys-color-primary --ct-field-text-focus-outline-color
focus-outline-width—2px --ct-field-outlined-focus-outline-width2px --ct-field-text-focus-outline-width
focus-supporting-text-color--ct-sys-color-on-surface-variant --ct-field-filled-focus-supporting-text-color--ct-sys-color-on-surface-variant --ct-field-outlined-focus-supporting-text-color—
focus-trailing-content-color--ct-sys-color-on-surface-variant --ct-field-filled-focus-trailing-content-color--ct-sys-color-on-surface-variant --ct-field-outlined-focus-trailing-content-color—
disabled-active-indicator-color--ct-sys-color-on-surface --ct-field-filled-disabled-active-indicator-color——
disabled-active-indicator-height1px --ct-field-filled-disabled-active-indicator-height——
disabled-active-indicator-opacity0.38 --ct-field-filled-disabled-active-indicator-opacity——
disabled-container-color--ct-sys-color-on-surface --ct-field-filled-disabled-container-color——
disabled-container-opacity0.04 --ct-field-filled-disabled-container-opacity——
disabled-content-color--ct-sys-color-on-surface --ct-field-filled-disabled-content-color--ct-sys-color-on-surface --ct-field-outlined-disabled-content-color--ct-sys-color-on-surface --ct-field-text-disabled-content-color
disabled-content-opacity0.38 --ct-field-filled-disabled-content-opacity0.38 --ct-field-outlined-disabled-content-opacity0.38 --ct-field-text-disabled-content-opacity
disabled-label-text-color--ct-sys-color-on-surface --ct-field-filled-disabled-label-text-color--ct-sys-color-on-surface --ct-field-outlined-disabled-label-text-color—
disabled-label-text-opacity0.38 --ct-field-filled-disabled-label-text-opacity0.38 --ct-field-outlined-disabled-label-text-opacity—
disabled-leading-content-color--ct-sys-color-on-surface --ct-field-filled-disabled-leading-content-color--ct-sys-color-on-surface --ct-field-outlined-disabled-leading-content-color—
disabled-leading-content-opacity0.38 --ct-field-filled-disabled-leading-content-opacity0.38 --ct-field-outlined-disabled-leading-content-opacity—
disabled-outline-color—--ct-sys-color-on-surface --ct-field-outlined-disabled-outline-color—
disabled-outline-opacity—0.12 --ct-field-outlined-disabled-outline-opacity—
disabled-outline-width—1px --ct-field-outlined-disabled-outline-width—
disabled-supporting-text-color--ct-sys-color-on-surface --ct-field-filled-disabled-supporting-text-color--ct-sys-color-on-surface --ct-field-outlined-disabled-supporting-text-color—
disabled-supporting-text-opacity0.38 --ct-field-filled-disabled-supporting-text-opacity0.38 --ct-field-outlined-disabled-supporting-text-opacity—
disabled-trailing-content-color--ct-sys-color-on-surface --ct-field-filled-disabled-trailing-content-color--ct-sys-color-on-surface --ct-field-outlined-disabled-trailing-content-color—
disabled-trailing-content-opacity0.38 --ct-field-filled-disabled-trailing-content-opacity0.38 --ct-field-outlined-disabled-trailing-content-opacity—
error-active-indicator-color--ct-sys-color-error --ct-field-filled-error-active-indicator-color——
error-content-color--ct-sys-color-on-surface --ct-field-filled-error-content-color--ct-sys-color-on-surface --ct-field-outlined-error-content-color--ct-sys-color-on-surface --ct-field-text-error-content-color
error-focus-active-indicator-color--ct-sys-color-error --ct-field-filled-error-focus-active-indicator-color——
error-focus-caret-color--ct-sys-color-error --ct-field-filled-error-focus-caret-color--ct-sys-color-error --ct-field-outlined-error-focus-caret-color--ct-sys-color-error --ct-field-text-error-focus-caret-color
error-focus-content-color--ct-sys-color-on-surface --ct-field-filled-error-focus-content-color--ct-sys-color-on-surface --ct-field-outlined-error-focus-content-color—
error-focus-label-text-color--ct-sys-color-error --ct-field-filled-error-focus-label-text-color--ct-sys-color-error --ct-field-outlined-error-focus-label-text-color—
error-focus-leading-content-color--ct-sys-color-on-surface-variant --ct-field-filled-error-focus-leading-content-color--ct-sys-color-on-surface-variant --ct-field-outlined-error-focus-leading-content-color—
error-focus-outline-color—--ct-sys-color-error --ct-field-outlined-error-focus-outline-color--ct-sys-color-error --ct-field-text-error-focus-outline-color
error-focus-supporting-text-color--ct-sys-color-error --ct-field-filled-error-focus-supporting-text-color--ct-sys-color-error --ct-field-outlined-error-focus-supporting-text-color—
error-focus-trailing-content-color--ct-sys-color-error --ct-field-filled-error-focus-trailing-content-color--ct-sys-color-error --ct-field-outlined-error-focus-trailing-content-color—
error-hover-active-indicator-color--ct-sys-color-on-error-container --ct-field-filled-error-hover-active-indicator-color——
error-hover-content-color--ct-sys-color-on-surface --ct-field-filled-error-hover-content-color--ct-sys-color-on-surface --ct-field-outlined-error-hover-content-color—
error-hover-label-text-color--ct-sys-color-on-error-container --ct-field-filled-error-hover-label-text-color--ct-sys-color-on-error-container --ct-field-outlined-error-hover-label-text-color—
error-hover-leading-content-color--ct-sys-color-on-surface-variant --ct-field-filled-error-hover-leading-content-color--ct-sys-color-on-surface-variant --ct-field-outlined-error-hover-leading-content-color—
error-hover-outline-color—--ct-sys-color-on-error-container --ct-field-outlined-error-hover-outline-color—
error-hover-state-layer-color--ct-sys-color-on-surface --ct-field-filled-error-hover-state-layer-color——
error-hover-state-layer-opacity--ct-sys-state-hover-state-layer-opacity --ct-field-filled-error-hover-state-layer-opacity——
error-hover-supporting-text-color--ct-sys-color-on-error-container --ct-field-filled-error-hover-supporting-text-color--ct-sys-color-on-error-container --ct-field-outlined-error-hover-supporting-text-color—
error-hover-trailing-content-color--ct-sys-color-on-error-container --ct-field-filled-error-hover-trailing-content-color--ct-sys-color-on-error-container --ct-field-outlined-error-hover-trailing-content-color—
error-label-text-color--ct-sys-color-error --ct-field-filled-error-label-text-color--ct-sys-color-error --ct-field-outlined-error-label-text-color—
error-leading-content-color--ct-sys-color-on-surface-variant --ct-field-filled-error-leading-content-color--ct-sys-color-on-surface-variant --ct-field-outlined-error-leading-content-color—
error-outline-color—--ct-sys-color-error --ct-field-outlined-error-outline-color—
error-supporting-text-color--ct-sys-color-error --ct-field-filled-error-supporting-text-color--ct-sys-color-error --ct-field-outlined-error-supporting-text-color—
error-trailing-content-color--ct-sys-color-error --ct-field-filled-error-trailing-content-color--ct-sys-color-error --ct-field-outlined-error-trailing-content-color—

Names and states⁠

The field's role is searchbox. No WAI-ARIA Authoring Practices pattern governs it, because it behaves like a plain text box.

  • The accessible name is the aria-label when set, and otherwise label. placeholder never names the field.
  • aria-label is the only ARIA attribute that changes what a screen reader announces. Any other aria-* attribute you set, aria-describedby included, has no effect.
  • The description is supporting-text, or error-text while the field is in error, followed by the character counter when maxlength is set.
  • The field is announced as invalid in the error state, which error or a reported validation error sets. In the filled and outlined variants, error text is announced when it appears.
  • required is announced as required and adds an asterisk to the visible label. Do not write the asterisk yourself.
  • Screen readers skip the search icon, so it never names the field. Put an icon that acts, such as a clear button, in the trailing-icon slot as a button with its own accessible name.
  • The field has no clear button. If you want one, add it as a button in the trailing-icon slot.
  • A badge is visual only. It adds nothing to the field's name or description.
  • Wrap a page-wide search in a search landmark, as in WAI-ARIA Authoring Practices: Search landmark, so assistive technology users can jump to it.
  • For a single line of text that is not a search, a text field suits the job better.

Keyboard and focus⁠

Key Action
Tab Moves focus into the field, then on to the next focusable element.
Shift+Tab Moves focus back to the previous focusable element.
Enter Delivers any held input event, fires change if the text was edited, then submits the owning form. Does nothing without a form.
Letters, Backspace, Delete, the arrow keys, Home, and End Edit the text and move the caret.

Typing, caret movement, and selection follow the platform. Enter pressed during IME composition (input-method text entry) is left to the input method.

  • Focus shows as a thicker active indicator in the filled variant, a thicker outline in the outlined variant, and a focus ring in the text variant.
  • disabled removes the field from the Tab order, and a disabled <fieldset> around it does the same.
  • A read-only field keeps its focus and its text selection.
  • Reporting a validation error focuses the field, or the form's first invalid field.

Pointer and touch⁠

The filled and outlined variants are 56 pixels tall at the default density. At the densest setting, density 4, they are still 36 pixels tall, against the 24 by 24 pixels WCAG 2.5.8 asks for. The field is at least 210 pixels wide; see Density.

Display settings⁠

  • In forced-colors mode, a disabled field's label, content, supporting text and indicator take GrayText, the outlined border is redrawn as a real border, and the text variant's focus ring is Highlight.
  • The label's float between its resting and floating positions animates for 150 milliseconds, whatever the reduced-motion setting.
  • Set text-direction to RTL or auto for input in a right-to-left language.

Standards⁠

With its defaults, the search field meets three WCAG 2.2 success criteria:

  • 2.1.1 Keyboard (A)
  • 2.4.7 Focus Visible (AA)
  • 2.5.8 Target Size (Minimum) (AA)

Four more depend on how you use it:

  • 1.1.1 Non-text Content (A): give a slotted image an alt, or mark a decorative one.
  • 3.3.1 Error Identification (A): put the message that says what is wrong in error-text.
  • 3.3.2 Labels or Instructions (A): set label to say what the field searches.
  • 4.1.2 Name, Role, Value (A): give a slotted icon button its own accessible name.