Text field
A text field takes one line of free text, such as a name or a street. Its variant sets how it stands out, so filled draws the eye and outlined keeps a long form quiet. Built-in input pacing runs your lookup as the user types, without the need for timer code. Pacing also includes async adaptive debouncing, tuning pacing to your back-end infrastructure.
Reference docs
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 a field stands out, from most to least:
- Filled: a field that must hold its own among other content, such as a search box on a busy page or a short sign-in form.
- Outlined: a form with many fields, where lighter containers keep the page calm, such as a checkout or a settings page.
- Text: a field set into a sentence or a dense layout, with no container and no visible label, such as an inline rename.
Built in
adds the asterisk to the label, and the form checks the field before it is sent.required- A failed rule shows as the field's own error text, in place of the browser's bubble.
shows a character counter below the field, read with the field's description.maxlength- Enter inside a form submits it, as a native input does.
paces theinput-event-modeinputevent while stays current on every keystroke.value andprefix-text show a symbol or unit beside the value without entering it.suffix-text
Using text fields well
- Pick filled or outlined for a form, and use it on every field.
- Label each field with the name of the value, such as "City", and put guidance on what to enter in
.supporting-text - Show a character counter, with
, whenever the value has a length limit.maxlength - Put a symbol or unit that frames the value, such as "@" or "kg", in a prefix or suffix rather than the label.
- Keep icons that only decorate decorative; make an icon that acts a button with its own accessible name.
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 text fields only, set the token on the element in your own CSS:
cw-text-field {
--ct-field-outlined-corner-shape: square;
}
The Styling tab lists every token and its default.
These rules follow Material 3 Expressive's guidance for text fields, on material.io.
Variants
variantfilledoutlinedtextfilledlabel
Label and hints
labelsupporting-textplaceholdermaxlengthminlength
Prefix and suffix
prefix-textsuffix-textvalue
Icons
leading-icon-nametrailing-icon-nameleading-icon or trailing-icon slot; the slot wins over the name when both are set. An icon is decoration, hidden from screen readers, so a slotted button needs its own aria-label.
Badges
badge-valuebadge-dotbadge-concealed
Validation
requiredminlengthpatternreportValidity() runs, never while the user types, and shows the browser's message as its own error text. Set errorerror-textrequired
Forms
The field submits valuenamechange for the edit. autocompleteaddress-level2 for a city, so it can offer a saved one.
Disabled and read-only
disabled<fieldset> disables every field inside it. readonly
Density
densitydensity
Keyboard type
inputmode
Text direction
text-directionLTRauto
Input pacing
input-event-modeinput. immediatedebouncedinput-rate-limit-delaythrottledadaptiveasyncSinkinput-rate-limit-delayinput fires.
Set asyncSinkinput it fires, in every mode. sink-duty-cycle
Properties
| Property | Attribute | Type | Description |
|---|---|---|---|
asyncSink | ValueChangeSink | 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 pacing. | |
autocomplete | autocomplete | string | Describes what, if any, type of autocomplete functionality the input should provide.See MDN: autocomplete attribute. See Forms. |
badgeConcealed | badge-concealed | booleandefault false | Hides the badge while keeping its value and dot setting, so clearing this property shows the same badge again. See Badges. |
badgeDot | badge-dot | booleandefault false | Shows the badge as a small dot with no text, whether or not badgeValue is set. See Badges. |
badgeValue | badge-value | string | The badge's text. While it is empty and badgeDot is not set, no badge renders. Ignored if badgeDot is set. See Badges. |
density | density0, 1, 2, 3, 4 | DensityDensity.Standard, .Dense1, .Dense2, .Dense3, .Dense4default Density.Standard, from the style configuration | The field's density level.Ignored for Text variants. See Density. |
disabled | disabled | boolean | Whether the element is disabled. Also reads true while a disabled <fieldset> contains it. See Disabled and read-only. |
error | error | booleandefault false | Shows 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 Validation. |
errorText | error-text | string | 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 Validation. |
formread-only | HTMLFormElement | The form the component belongs to, or null when it has none. | |
hasLeadingIcon | has-leading-icon | booleandefault false | Whether 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. |
hasTrailingIcon | has-trailing-icon | booleandefault false | Whether 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. |
inputEventMode | input-event-modeimmediate, adaptive, debounced, throttled | InputEventModeInputEventMode.Immediate, .Adaptive, .Debounced, .Throttleddefault InputEventMode.Immediate | When 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 pacing. |
inputMode | inputmodenone, decimal, email, numeric, search, tel, text, url | InputModeInputMode.None, .Decimal, .Email, .Numeric, .Search, .Tel, .Text, .Urldefault InputMode.Text, from the app configuration | The 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 Keyboard type. |
inputRateLimitDelay | input-rate-limit-delay | numberdefault 300 | The 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 pacing. |
label | label | string | 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, Label and hints. |
labelsread-only | NodeList | The <label> elements associated with the element. | |
leadingIconName | leading-icon-name | string | A leading Material Symbols icon name. This is an alternative to using the leading-icon slot. If both are provided, the leading-icon slot will take precedence, and a warning will be logged. See Icons. |
maxLength | maxlength | numberdefault -1 | The 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 Label and hints. |
minLength | minlength | numberdefault -1 | The 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 Label and hints, Validation. |
name | name | string | The name the element's value is submitted under with its form. See Forms. |
pattern | pattern | string | A regular expression that the field's value must match to pass constraint validation.See MDN: input pattern attribute. See Validation. |
placeholder | placeholder | string | 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 Label and hints. |
prefixText | prefix-text | string | An optional prefix to display before the input value. See Prefix and suffix. |
readOnly | readonly | booleandefault false | Indicates whether or not a user should be able to edit the field's value.See MDN: input readonly attribute. See Disabled and read-only. |
required | required | booleandefault false | Indicates 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 Validation. |
selectionEnd | number | The position where the text selection ends. | |
selectionStart | number | The position where the text selection starts. | |
sinkDutyCycle | sink-duty-cycle | numberdefault 1 | The 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 pacing. |
suffixText | suffix-text | string | An optional suffix to display after the input value. See Prefix and suffix. |
supportingText | supporting-text | string | 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 Label and hints. |
textDirection | text-direction"", auto, LTR, RTL | TextDirectionTextDirection.Default, .Auto, .LTR, .RTLdefault TextDirection.Default | Override the input text CSS direction. Useful for RTL languages that use LTR notation for fractions. See Text direction. |
trailingIconName | trailing-icon-name | string | A 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-only | string | The message describing why the element is invalid, or an empty string when it is valid. | |
validityread-only | ValidityState | The element's ValidityState. | |
value | value | string | The field's current value, always as a string. See Prefix and suffix, Forms. |
variant | variantfilled, outlined, text | FieldVariantFieldVariant.Filled, .Outlined, .Textdefault FieldVariant.Filled, from the style configuration | The field's variant. Unset, the style configuration's default field variant applies, else Filled. See Variants. |
willValidateread-only | boolean | Whether the element takes part in constraint validation. False while it is disabled or read-only. |
input-event-modeinput event: valuechange is never paced.
Slots
| Slot | Description |
|---|---|
container | Custom background content. |
leading-icon | The leading icon, intended for a cw-icon or equivalent. |
trailing-icon | The trailing icon, intended for a cw-icon or equivalent. |
Events
| Event | Type | Detail | Description |
|---|---|---|---|
select | Event | — | Dispatched when the user selects text in the field. It bubbles. |
change | Event | — | Dispatched when the user commits a change to the value, such as by leaving the field after editing it. It bubbles. |
input | InputEvent | — | Dispatched each time the user edits the value. It bubbles and is composed. |
Enter in a field with an owning form delivers a held input, fires change for an edit, and then submits; the blur that follows fires no second change.
Methods
| Method | Returns | Description |
|---|---|---|
checkValidity() | boolean | Checks the element's validity and returns true if it is valid. If not, it dispatches an invalid event; nothing changes on screen. |
reportValidity() | boolean | Checks 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() | void | Restores the value the value attribute holds, or an empty string, and clears any error reportValidity() showed. |
select() | void | Selects all the text in the field.See MDN: HTMLInputElement.select() and MDN: HTMLTextAreaElement.select(). |
setCustomValidity(error: string) | void | Sets a custom validation message, which makes the element invalid. An empty string clears it. |
setRangeText(replacement: string, start?: number, end?: number, selectionMode?: string) | void | Replaces 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) | void | Sets the start and end positions of the selection in the field.See MDN: HTMLInputElement.setSelectionRange() and MDN: HTMLTextAreaElement.setSelectionRange(). |
Props
| Prop | Type | Description |
|---|---|---|
asyncSink | ValueChangeSink | 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 pacing. |
autocomplete | string | Describes what, if any, type of autocomplete functionality the input should provide.See MDN: autocomplete attribute. See Forms. |
badgeConcealed | booleandefault false | Hides the badge while keeping its value and dot setting, so clearing this property shows the same badge again. See Badges. |
badgeDot | booleandefault false | Shows the badge as a small dot with no text, whether or not badgeValue is set. See Badges. |
badgeValue | string | The badge's text. While it is empty and badgeDot is not set, no badge renders. Ignored if badgeDot is set. See Badges. |
density | DensityTypeDensity.Standard, .Dense1, .Dense2, .Dense3, .Dense4default Density.Standard, from the style configuration | The field's density level.Ignored for Text variants. See Density. |
disabled | boolean | Whether the element is disabled. Also reads true while a disabled <fieldset> contains it. See Disabled and read-only. |
error | booleandefault false | Shows 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 Validation. |
errorText | string | 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 Validation. |
formread-only (ref) | HTMLFormElement | The form the component belongs to, or null when it has none. |
hasLeadingIcon | booleandefault false | Whether 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. |
hasTrailingIcon | booleandefault false | Whether 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. |
inputEventMode | InputEventModeTypeInputEventMode.Immediate, .Adaptive, .Debounced, .Throttleddefault InputEventMode.Immediate | When 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 pacing. |
inputMode | InputModeTypeInputMode.None, .Decimal, .Email, .Numeric, .Search, .Tel, .Text, .Urldefault InputMode.Text, from the app configuration | The 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 Keyboard type. |
inputRateLimitDelay | numberdefault 300 | The 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 pacing. |
label | string | 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, Label and hints. |
labelsread-only (ref) | NodeList | The <label> elements associated with the element. |
leadingIconName | string | A leading Material Symbols icon name. This is an alternative to using the slot="leading-icon" child. If both are provided, the slot="leading-icon" child will take precedence, and a warning will be logged. See Icons. |
maxLength | numberdefault -1 | The 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 Label and hints. |
minLength | numberdefault -1 | The 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 Label and hints, Validation. |
name | string | The name the element's value is submitted under with its form. See Forms. |
pattern | string | A regular expression that the field's value must match to pass constraint validation.See MDN: input pattern attribute. See Validation. |
placeholder | string | 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 Label and hints. |
prefixText | string | An optional prefix to display before the input value. See Prefix and suffix. |
readOnly | booleandefault false | Indicates whether or not a user should be able to edit the field's value.See MDN: input readonly attribute. See Disabled and read-only. |
required | booleandefault false | Indicates 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 Validation. |
selectionEndthrough the ref | number | The position where the text selection ends. |
selectionStartthrough the ref | number | The position where the text selection starts. |
sinkDutyCycle | numberdefault 1 | The 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 pacing. |
suffixText | string | An optional suffix to display after the input value. See Prefix and suffix. |
supportingText | string | 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 Label and hints. |
textDirection | TextDirectionTypeTextDirection.Default, .Auto, .LTR, .RTLdefault TextDirection.Default | Override the input text CSS direction. Useful for RTL languages that use LTR notation for fractions. See Text direction. |
trailingIconName | string | A 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) | string | The message describing why the element is invalid, or an empty string when it is valid. |
validityread-only (ref) | ValidityState | The element's ValidityState. |
value | string | The field's current value, always as a string. See Prefix and suffix, Forms. |
variant | FieldVariantTypeFieldVariant.Filled, .Outlined, .Textdefault FieldVariant.Filled, from the style configuration | The field's variant. Unset, the style configuration's default field variant applies, else Filled. See Variants. |
willValidateread-only (ref) | boolean | Whether the element takes part in constraint validation. False while it is disabled or read-only. |
input-event-modeinput event: valuechange is never paced.
Children
| Child | Description |
|---|---|
a child with slot="container" | Custom background content. |
a child with slot="leading-icon" | The leading icon, intended for a CrIcon or equivalent. |
a child with slot="trailing-icon" | The trailing icon, intended for a CrIcon or equivalent. |
Events
| Prop | Argument | Description |
|---|---|---|
onSelect | Event | Dispatched when the user selects text in the field. It bubbles. |
onChange | React.ChangeEvent<HTMLInputElement> | Dispatched when the user commits a change to the value, such as by leaving the field after editing it. It bubbles. |
onInput | React.ChangeEvent<HTMLInputElement> | Dispatched each time the user edits the value. It bubbles and is composed. |
Enter in a field with an owning form delivers a held input, fires change for an edit, and then submits; the blur that follows fires no second change.
Methods
Call these on the element the ref holds.
| Method | Returns | Description |
|---|---|---|
checkValidity() | boolean | Checks the element's validity and returns true if it is valid. If not, it dispatches an invalid event; nothing changes on screen. |
reportValidity() | boolean | Checks 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() | void | Restores the value the value attribute holds, or an empty string, and clears any error reportValidity() showed. |
select() | void | Selects all the text in the field.See MDN: HTMLInputElement.select() and MDN: HTMLTextAreaElement.select(). |
setCustomValidity(error: string) | void | Sets a custom validation message, which makes the element invalid. An empty string clears it. |
setRangeText(replacement: string, start?: number, end?: number, selectionMode?: string) | void | Replaces 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) | void | Sets the start and end positions of the selection in the field.See MDN: HTMLInputElement.setSelectionRange() and MDN: HTMLTextAreaElement.setSelectionRange(). |
Parameters
| Parameter | Type | Description |
|---|---|---|
AsyncSink | ValueChangeSink? | 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 pacing. |
Autocomplete | string? | Describes what, if any, type of autocomplete functionality the input should provide.See MDN: autocomplete attribute. See Forms. |
BadgeConcealed | bool?default false | Hides the badge while keeping its value and dot setting, so clearing this property shows the same badge again. See Badges. |
BadgeDot | bool?default false | Shows the badge as a small dot with no text, whether or not BadgeValue is set. See Badges. |
BadgeValue | string? | The badge's text. While it is empty and BadgeDot is not set, no badge renders. Ignored if BadgeDot is set. See Badges. |
Density | Density?Density.Standard, .Dense1, .Dense2, .Dense3, .Dense4default Density.Standard, from the style configuration | The field's density level.Ignored for Text variants. See Density. |
Disabled | bool? | Whether the element is disabled. Also reads true while a disabled <fieldset> contains it. See Disabled and read-only. |
Error | bool?default false | Shows 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 Validation. |
ErrorText | string? | 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 Validation. |
HasLeadingIcon | bool?default false | Whether 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. |
HasTrailingIcon | bool?default false | Whether 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. |
InputEventMode | InputEventMode?InputEventMode.Immediate, .Adaptive, .Debounced, .Throttleddefault InputEventMode.Immediate | When 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 pacing. |
InputMode | InputMode?InputMode.None, .Decimal, .Email, .Numeric, .Search, .Tel, .Text, .Urldefault InputMode.Text, from the app configuration | The 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 Keyboard type. |
InputRateLimitDelay | int?default 300 | The 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 pacing. |
Label | string? | 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, Label and hints. |
LeadingIconName | string? | A leading Material Symbols icon name. This is an alternative to using the LeadingIcon render fragment. If both are provided, the LeadingIcon render fragment will take precedence, and a warning will be logged. See Icons. |
MaxLength | int?default -1 | The 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 Label and hints. |
MinLength | int?default -1 | The 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 Label and hints, Validation. |
Name | string? | The name the element's value is submitted under with its form. See Forms. |
Pattern | string? | A regular expression that the field's value must match to pass constraint validation.See MDN: input pattern attribute. See Validation. |
Placeholder | string? | 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 Label and hints. |
PrefixText | string? | An optional prefix to display before the input value. See Prefix and suffix. |
ReadOnly | bool?default false | Indicates whether or not a user should be able to edit the field's value.See MDN: input readonly attribute. See Disabled and read-only. |
Required | bool?default false | Indicates 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 Validation. |
SinkDutyCycle | double?default 1 | The 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 pacing. |
SuffixText | string? | An optional suffix to display after the input value. See Prefix and suffix. |
SupportingText | string? | 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 Label and hints. |
TextDirection | TextDirection?TextDirection.Default, .Auto, .LTR, .RTLdefault TextDirection.Default | Override the input text CSS direction. Useful for RTL languages that use LTR notation for fractions. See Text direction. |
TrailingIconName | string? | 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. |
Value | string? | The field's current value, always as a string. See Prefix and suffix, Forms. |
ValueExpression | Expression<Func<string>>? | Gets or sets an expression that identifies the bound value. |
Variant | FieldVariant?FieldVariant.Filled, .Outlined, .Textdefault FieldVariant.Filled, from the style configuration | The field's variant. Unset, the style configuration's default field variant applies, else Filled. See Variants. |
input-event-modeinput event: valuechange is never paced.
Render fragments
| Parameter | Type | Description |
|---|---|---|
Container | RenderFragment? | Custom background content. |
LeadingIcon | RenderFragment? | The leading icon, intended for a CbIcon or equivalent. |
TrailingIcon | RenderFragment? | The trailing icon, intended for a CbIcon or equivalent. |
Event callbacks
| Parameter | Type | Description |
|---|---|---|
OnSelect | EventCallback | Dispatched when the user selects text in the field. It bubbles. |
OnChange | EventCallback<ChangeEventArgs> | Dispatched when the user commits a change to the value, such as by leaving the field after editing it. It bubbles. |
OnInput | EventCallback<ChangeEventArgs> | Dispatched each time the user edits the value. It bubbles and is composed. |
Enter in a field with an owning form delivers a held input, fires change for an edit, and then submits; the blur that follows fires no second change.
Inputs
| Input | Type | Description |
|---|---|---|
asyncSink | ValueChangeSink | 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 pacing. |
autocomplete | string | Describes what, if any, type of autocomplete functionality the input should provide.See MDN: autocomplete attribute. See Forms. |
badgeConcealed | booleandefault false | Hides the badge while keeping its value and dot setting, so clearing this property shows the same badge again. See Badges. |
badgeDot | booleandefault false | Shows the badge as a small dot with no text, whether or not badgeValue is set. See Badges. |
badgeValue | string | The badge's text. While it is empty and badgeDot is not set, no badge renders. Ignored if badgeDot is set. See Badges. |
density | DensityTypeDensity.Standard, .Dense1, .Dense2, .Dense3, .Dense4default Density.Standard, from the style configuration | The field's density level.Ignored for Text variants. See Density. |
disabled | boolean | Whether the element is disabled. Also reads true while a disabled <fieldset> contains it. See Disabled and read-only. |
error | booleandefault false | Shows 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 Validation. |
errorText | string | 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 Validation. |
hasLeadingIcon | booleandefault false | Whether 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. |
hasTrailingIcon | booleandefault false | Whether 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. |
inputEventMode | InputEventModeTypeInputEventMode.Immediate, .Adaptive, .Debounced, .Throttleddefault InputEventMode.Immediate | When 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 pacing. |
inputMode | InputModeTypeInputMode.None, .Decimal, .Email, .Numeric, .Search, .Tel, .Text, .Urldefault InputMode.Text, from the app configuration | The 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 Keyboard type. |
inputRateLimitDelay | numberdefault 300 | The 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 pacing. |
label | string | 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, Label and hints. |
leadingIconName | string | A leading Material Symbols icon name. This is an alternative to using the leading-icon slot. If both are provided, the leading-icon slot will take precedence, and a warning will be logged. See Icons. |
maxLength | numberdefault -1 | The 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 Label and hints. |
minLength | numberdefault -1 | The 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 Label and hints, Validation. |
name | string | The name the element's value is submitted under with its form. See Forms. |
pattern | string | A regular expression that the field's value must match to pass constraint validation.See MDN: input pattern attribute. See Validation. |
placeholder | string | 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 Label and hints. |
prefixText | string | An optional prefix to display before the input value. See Prefix and suffix. |
readOnly | booleandefault false | Indicates whether or not a user should be able to edit the field's value.See MDN: input readonly attribute. See Disabled and read-only. |
required | booleandefault false | Indicates 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 Validation. |
sinkDutyCycle | numberdefault 1 | The 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 pacing. |
suffixText | string | An optional suffix to display after the input value. See Prefix and suffix. |
supportingText | string | 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 Label and hints. |
textDirection | TextDirectionTypeTextDirection.Default, .Auto, .LTR, .RTLdefault TextDirection.Default | Override the input text CSS direction. Useful for RTL languages that use LTR notation for fractions. See Text direction. |
trailingIconName | string | A 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. |
value | string | The field's current value, always as a string. See Prefix and suffix, Forms. |
variant | FieldVariantTypeFieldVariant.Filled, .Outlined, .Textdefault FieldVariant.Filled, from the style configuration | The field's variant. Unset, the style configuration's default field variant applies, else Filled. See Variants. |
input-event-modeinput event: valuechange is never paced.
Content projection
| Content | Description |
|---|---|
an element with slot="container" | Custom background content. |
an element with slot="leading-icon" | The leading icon, intended for a CaIcon or equivalent. |
an element with slot="trailing-icon" | The trailing icon, intended for a CaIcon or equivalent. |
Outputs
| Output | Event | Description |
|---|---|---|
cwSelect | Event | Dispatched when the user selects text in the field. It bubbles. |
cwChange | Event | Dispatched when the user commits a change to the value, such as by leaving the field after editing it. It bubbles. |
cwInput | InputEvent | Dispatched each time the user edits the value. It bubbles and is composed. |
Enter in a field with an owning form delivers a held input, fires change for an edit, and then submits; the blur that follows fires no second change.
Props
| Prop | Type | Description |
|---|---|---|
asyncSink | ValueChangeSink | 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 pacing. |
autocomplete | string | Describes what, if any, type of autocomplete functionality the input should provide.See MDN: autocomplete attribute. See Forms. |
badgeConcealed | booleandefault false | Hides the badge while keeping its value and dot setting, so clearing this property shows the same badge again. See Badges. |
badgeDot | booleandefault false | Shows the badge as a small dot with no text, whether or not badgeValue is set. See Badges. |
badgeValue | string | The badge's text. While it is empty and badgeDot is not set, no badge renders. Ignored if badgeDot is set. See Badges. |
density | DensityTypeDensity.Standard, .Dense1, .Dense2, .Dense3, .Dense4default Density.Standard, from the style configuration | The field's density level.Ignored for Text variants. See Density. |
disabled | boolean | Whether the element is disabled. Also reads true while a disabled <fieldset> contains it. See Disabled and read-only. |
error | booleandefault false | Shows 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 Validation. |
errorText | string | 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 Validation. |
hasLeadingIcon | booleandefault false | Whether 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. |
hasTrailingIcon | booleandefault false | Whether 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. |
inputEventMode | InputEventModeTypeInputEventMode.Immediate, .Adaptive, .Debounced, .Throttleddefault InputEventMode.Immediate | When 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 pacing. |
inputMode | InputModeTypeInputMode.None, .Decimal, .Email, .Numeric, .Search, .Tel, .Text, .Urldefault InputMode.Text, from the app configuration | The 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 Keyboard type. |
inputRateLimitDelay | numberdefault 300 | The 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 pacing. |
label | string | 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, Label and hints. |
leadingIconName | string | A leading Material Symbols icon name. This is an alternative to using the leading-icon slot. If both are provided, the leading-icon slot will take precedence, and a warning will be logged. See Icons. |
maxLength | numberdefault -1 | The 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 Label and hints. |
minLength | numberdefault -1 | The 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 Label and hints, Validation. |
name | string | The name the element's value is submitted under with its form. See Forms. |
pattern | string | A regular expression that the field's value must match to pass constraint validation.See MDN: input pattern attribute. See Validation. |
placeholder | string | 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 Label and hints. |
prefixText | string | An optional prefix to display before the input value. See Prefix and suffix. |
readOnly | booleandefault false | Indicates whether or not a user should be able to edit the field's value.See MDN: input readonly attribute. See Disabled and read-only. |
required | booleandefault false | Indicates 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 Validation. |
sinkDutyCycle | numberdefault 1 | The 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 pacing. |
suffixText | string | An optional suffix to display after the input value. See Prefix and suffix. |
supportingText | string | 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 Label and hints. |
textDirection | TextDirectionTypeTextDirection.Default, .Auto, .LTR, .RTLdefault TextDirection.Default | Override the input text CSS direction. Useful for RTL languages that use LTR notation for fractions. See Text direction. |
trailingIconName | string | A 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. |
value | string | The field's current value, always as a string. See Prefix and suffix, Forms. |
variant | FieldVariantTypeFieldVariant.Filled, .Outlined, .Textdefault FieldVariant.Filled, from the style configuration | The field's variant. Unset, the style configuration's default field variant applies, else Filled. See Variants. |
input-event-modeinput event: valuechange is never paced.
Slots
| Slot | Description |
|---|---|
container | Custom background content. |
leading-icon | The leading icon, intended for a CvIcon or equivalent. |
trailing-icon | The trailing icon, intended for a CvIcon or equivalent. |
Events
| Event | Type | Description |
|---|---|---|
select | Event | Dispatched when the user selects text in the field. It bubbles. |
change | Event | Dispatched when the user commits a change to the value, such as by leaving the field after editing it. It bubbles. |
input | InputEvent | Dispatched each time the user edits the value. It bubbles and is composed. |
Enter in a field with an owning form delivers a held input, fires change for an edit, and then submits; the blur that follows fires no second change.
Props
| Prop | Type | Description |
|---|---|---|
asyncSink | ValueChangeSink | 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 pacing. |
autocomplete | string | Describes what, if any, type of autocomplete functionality the input should provide.See MDN: autocomplete attribute. See Forms. |
badgeConcealed | booleandefault false | Hides the badge while keeping its value and dot setting, so clearing this property shows the same badge again. See Badges. |
badgeDot | booleandefault false | Shows the badge as a small dot with no text, whether or not badgeValue is set. See Badges. |
badgeValue | string | The badge's text. While it is empty and badgeDot is not set, no badge renders. Ignored if badgeDot is set. See Badges. |
density | DensityTypeDensity.Standard, .Dense1, .Dense2, .Dense3, .Dense4default Density.Standard, from the style configuration | The field's density level.Ignored for Text variants. See Density. |
disabled | boolean | Whether the element is disabled. Also reads true while a disabled <fieldset> contains it. See Disabled and read-only. |
error | booleandefault false | Shows 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 Validation. |
errorText | string | 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 Validation. |
hasLeadingIcon | booleandefault false | Whether 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. |
hasTrailingIcon | booleandefault false | Whether 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. |
inputEventMode | InputEventModeTypeInputEventMode.Immediate, .Adaptive, .Debounced, .Throttleddefault InputEventMode.Immediate | When 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 pacing. |
inputMode | InputModeTypeInputMode.None, .Decimal, .Email, .Numeric, .Search, .Tel, .Text, .Urldefault InputMode.Text, from the app configuration | The 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 Keyboard type. |
inputRateLimitDelay | numberdefault 300 | The 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 pacing. |
label | string | 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, Label and hints. |
leadingIconName | string | A leading Material Symbols icon name. This is an alternative to using the leadingIconSnippet snippet. If both are provided, the leadingIconSnippet snippet will take precedence, and a warning will be logged. See Icons. |
maxLength | numberdefault -1 | The 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 Label and hints. |
minLength | numberdefault -1 | The 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 Label and hints, Validation. |
name | string | The name the element's value is submitted under with its form. See Forms. |
pattern | string | A regular expression that the field's value must match to pass constraint validation.See MDN: input pattern attribute. See Validation. |
placeholder | string | 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 Label and hints. |
prefixText | string | An optional prefix to display before the input value. See Prefix and suffix. |
readOnly | booleandefault false | Indicates whether or not a user should be able to edit the field's value.See MDN: input readonly attribute. See Disabled and read-only. |
required | booleandefault false | Indicates 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 Validation. |
sinkDutyCycle | numberdefault 1 | The 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 pacing. |
suffixText | string | An optional suffix to display after the input value. See Prefix and suffix. |
supportingText | string | 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 Label and hints. |
textDirection | TextDirectionTypeTextDirection.Default, .Auto, .LTR, .RTLdefault TextDirection.Default | Override the input text CSS direction. Useful for RTL languages that use LTR notation for fractions. See Text direction. |
trailingIconName | string | A 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. |
value | string | The field's current value, always as a string. See Prefix and suffix, Forms. |
variant | FieldVariantTypeFieldVariant.Filled, .Outlined, .Textdefault FieldVariant.Filled, from the style configuration | The field's variant. Unset, the style configuration's default field variant applies, else Filled. See Variants. |
input-event-modeinput event: valuechange is never paced.
Snippets
| Snippet | Description |
|---|---|
containerSnippet | Custom background content. |
leadingIconSnippet | The leading icon, intended for a CsIcon or equivalent. |
trailingIconSnippet | The trailing icon, intended for a CsIcon or equivalent. |
Events
| Prop | Type | Description |
|---|---|---|
onSelect | Event | Dispatched when the user selects text in the field. It bubbles. |
onChange | Event | Dispatched when the user commits a change to the value, such as by leaving the field after editing it. It bubbles. |
onInput | InputEvent | Dispatched each time the user edits the value. It bubbles and is composed. |
Enter in a field with an owning form delivers a held input, fires change for an edit, and then submits; the blur that follows fires no second change.
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
| Name | filled | outlined | text |
|---|---|---|---|
active-indicator-color | --ct-sys-color-on-surface-variant --ct-field-filled-active-indicator-color | — | — |
active-indicator-height | 1px --ct-field-filled-active-indicator-height | — | — |
bottom-space | 16px --ct-field-filled-bottom-space | 16px --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-space | 2px --ct-field-filled-content-prefix-trailing-space | 2px --ct-field-outlined-content-prefix-trailing-space | 2px --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-space | 16px --ct-field-filled-content-space | 16px --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-space | 2px --ct-field-filled-content-suffix-leading-space | 2px --ct-field-outlined-content-suffix-leading-space | 2px --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-size | 24px --ct-field-filled-leading-content-size | 24px --ct-field-outlined-leading-content-size | 24px --ct-field-text-leading-content-size |
leading-space | 16px --ct-field-filled-leading-space | 16px --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-space | 16px --ct-field-filled-supporting-text-leading-space | 16px --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-space | 4px --ct-field-filled-supporting-text-top-space | 4px --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-space | 16px --ct-field-filled-supporting-text-trailing-space | 16px --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-space | 16px --ct-field-filled-top-space | 16px --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-size | 24px --ct-field-filled-trailing-content-size | 24px --ct-field-outlined-trailing-content-size | 24px --ct-field-text-trailing-content-size |
trailing-space | 16px --ct-field-filled-trailing-space | 16px --ct-field-outlined-trailing-space | — |
with-label-bottom-space | 8px --ct-field-filled-with-label-bottom-space | — | — |
with-label-top-space | 8px --ct-field-filled-with-label-top-space | — | — |
with-leading-content-leading-space | 12px --ct-field-filled-with-leading-content-leading-space | 12px --ct-field-outlined-with-leading-content-leading-space | — |
with-trailing-content-trailing-space | 12px --ct-field-filled-with-trailing-content-trailing-space | 12px --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-height | 1px --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-height | 3px --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-width | 2px --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-height | 1px --ct-field-filled-disabled-active-indicator-height | — | — |
disabled-active-indicator-opacity | 0.38 --ct-field-filled-disabled-active-indicator-opacity | — | — |
disabled-container-color | --ct-sys-color-on-surface --ct-field-filled-disabled-container-color | — | — |
disabled-container-opacity | 0.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-opacity | 0.38 --ct-field-filled-disabled-content-opacity | 0.38 --ct-field-outlined-disabled-content-opacity | 0.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-opacity | 0.38 --ct-field-filled-disabled-label-text-opacity | 0.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-opacity | 0.38 --ct-field-filled-disabled-leading-content-opacity | 0.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-opacity | 0.38 --ct-field-filled-disabled-supporting-text-opacity | 0.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-opacity | 0.38 --ct-field-filled-disabled-trailing-content-opacity | 0.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
A text field follows a native text input's own semantics rather than a pattern from the WAI-ARIA Authoring Practices.
- The accessible name is
, or the field'slabelaria-labelwhen one is set. never names the field.placeholder - Any
aria-*attribute on the field other thanaria-label,aria-describedbyincluded, has no effect. - The input's description is the field's own text:
, orsupporting-text while in error, then the counter as "12 / 40" whenerror-text is set.maxlength - A screen reader announces the field as invalid in the error state, set by
or by a validation error. In the filled and outlined variants the error text is announced when it appears.error makes a screen reader announce the field as required, and adds an asterisk to the visible label.required ,prefix-text , and the icons stay out of the name and the description. A control placed in an icon slot names itself; see Icons.suffix-text- The badge stays out of the field's name and description too, and a dot or a concealed badge is hidden entirely. Put anything the user must know in
.supporting-text
Keyboard and focus
| Key | Action |
|---|---|
| Tab | Moves focus to the input, and on past it. |
| Enter | Submits the owning form, firing change first for an edit. With no form, it does nothing. |
| Arrow keys, Home, End | Move the caret; with Shift, extend the selection. |
These are a native input's own behavior. Enter submits the owning form, except while an input method is still composing.
- Focus thickens the active indicator in the filled variant and the outline in the outlined variant. The text variant draws a focus ring around the input.
, or a disableddisabled<fieldset>around the field, takes the input out of the Tab order. keeps the field in the Tab order, so its value can still be selected and copied.readonly
Pointer and touch
- In the filled and outlined variants, a click anywhere on the container focuses the input. The container is at least 210 pixels wide and taller than 24 pixels at every density, above the 24 by 24 pixels of WCAG 2.5.8.
- In the text variant the input itself is the target, one line of text tall, with no container around it.
Display settings
- Forced colors: a disabled field's label, text, supporting text, and indicator take
GrayText, the outlined variant's outline is redrawn as a real border, and the text variant's focus ring takesHighlight. - Reduced motion: the label's float, a 150-millisecond animation, runs whatever the reader's motion preference.
- Right to left: the typed text follows the page's direction unless
overrides it.text-direction
Standards
With its defaults, the text field meets three WCAG 2.2 success criteria:
Nine more depend on how you use it:
- 1.1.1 Non-text Content (A): give a control in an icon slot its own
aria-label. - 1.3.5 Identify Input Purpose (AA): set
on a field that asks for the user's own details, such asautocompletenameorstreet-address. - 2.4.6 Headings and Labels (AA): write a
that names the value.label - 2.5.3 Label in Name (A): start an
aria-labelyou set with the visible label's words. - 2.5.8 Target Size (Minimum) (AA): in the text variant, keep other controls 24 pixels clear of the input.
- 3.3.1 Error Identification (A): set
whenever you seterror-text , and describe the error in text beside a text-variant field, which draws none.error - 3.3.2 Labels or Instructions (A): put format rules in
, and give a text-variant field a visible label, since it draws none.supporting-text - 3.3.3 Error Suggestion (AA): write
that says how to fix the value, such as "Use lowercase letters and digits."error-text - 4.1.2 Name, Role, Value (A): give every field a
, or anlabelaria-labelwhere no label shows.