Skip to main content
U.S. Flag

An official website of the United States government

CMS Design System

Masked field

A masked field is an enhanced input field that improves readability by providing visual and non-visual cues to a user about the expected value.

Masked field

<TextField mask={...}>

A Mask component renders a controlled input field that applies formatting to the input value when the field is blurred.

Passing a mask prop into the TextField component with a valid value will enable formatting to occur when the field is blurred. To "unmask" the value, you can import and call the unmaskValue method.

$
Code snippet
<div class="ds-u-clearfix">
  <label
    class="ds-c-label ds-u-margin-top--0"
    for="field_1103"
    id="field_1103-label"
  >
    <span class="">Currency</span>
  </label>
  <div class="ds-c-field-mask ds-c-field-mask--currency">
    <div class="ds-c-field__before ds-c-field__before--currency">$</div>
    <input
      type="text"
      class="ds-c-field ds-c-field--currency"
      inputmode="numeric"
      pattern="[0-9.,-]*"
      aria-invalid="false"
      name="currency_example"
      id="field_1103"
      value="2,500"
      aria-label="Enter monthly income amount in dollars."
    />
  </div>
</div>
<div class="ds-u-clearfix">
  <label class="ds-c-label" for="field_1104" id="field_1104-label">
    <span class="">Phone number</span>
  </label>
  <div class="ds-c-field-mask ds-c-field-mask--phone">
    <input
      type="text"
      class="ds-c-field ds-c-field--phone"
      inputmode="numeric"
      pattern="[0-9-]*"
      aria-invalid="false"
      name="phone_example"
      id="field_1104"
      value="123-456-7890"
    />
  </div>
</div>
<div class="ds-u-clearfix">
  <label class="ds-c-label" for="field_1105" id="field_1105-label">
    <span class="">Social security number (SSN)</span>
  </label>
  <div class="ds-c-field-mask ds-c-field-mask--ssn">
    <input
      type="text"
      class="ds-c-field ds-c-field--ssn"
      inputmode="numeric"
      pattern="[0-9-*]*"
      aria-invalid="false"
      name="ssn_example"
      id="field_1105"
      value="123-45-6789"
    />
  </div>
</div>
<div class="ds-u-clearfix">
  <label class="ds-c-label" for="field_1106" id="field_1106-label">
    <span class="">Zip code</span>
  </label>
  <div class="ds-c-field-mask ds-c-field-mask--zip">
    <input
      type="text"
      class="ds-c-field ds-c-field--zip"
      inputmode="numeric"
      pattern="[0-9-]*"
      aria-invalid="false"
      name="zip_example"
      id="field_1106"
      value="12345-6789"
    />
  </div>
</div>

Props

React Properties Documentation
NameTypeDefaultDescription
ariaLabelstring

Apply an aria-label to the text field to provide additional context to assistive devices.

classNamestring

Additional classes to be added to the root div element

defaultValuestring | number

Sets the initial value. Use this for an uncontrolled component; otherwise, use the value property.

disabledboolean
errorMessageReact.ReactNode
errorMessageClassNamestring

Additional classes to be added to the error message

errorPlacement'top' | 'bottom'

Location of the error message relative to the field input

fieldClassNamestring

Additional classes to be added to the field element

focusTriggerboolean

Used to focus input on componentDidMount()

hintReact.ReactNode

Additional hint text to display

idstring

A unique id to be used on the text field.

inputRef(...args: any[]) => any

Access a reference to the input or textarea element

requirementLabelReact.ReactNode

Text showing the requirement ("Required", "Optional", etc.). See Required and Optional Fields.

inversedboolean

Applies the "inverse" UI theme

labelrequiredReact.ReactNode

Label for the input

labelMask(rawInput: string, valueOnly?: boolean) => string

Applies date format masking to the input value entered and renders to a text field above the input. Passing true to valueOnly will return just the formatted value entered.

labelClassNamestring

Additional classes to be added to the FormLabel.

labelIdstring

A unique id to be used on the label field.

mask'currency' | 'phone' | 'ssn' | 'zip'

Apply formatting to the field that's unique to the value you expect to be entered. Depending on the mask, the field's appearance and functionality may be affected.

multilineboolean

Whether or not the text field is a multiline text field

namerequiredstring
numericboolean

Sets inputMode, type, and pattern to improve accessibility and consistency for number fields. Use this prop instead of type="number", see here for more information.

onBlur(...args: any[]) => any
onChange(...args: any[]) => any
rowsnumber | string

Optionally specify the number of visible text lines for the field. Only applicable if this is a multiline field.

size'small' | 'medium'

Set the max-width of the input either to 'small' or 'medium'.

typestring'text'

HTML input type attribute. If you are using type=number please use the numeric prop instead.

valuestring | number

Sets the input's value. Use this in combination with onChange for a controlled component; otherwise, set defaultValue.

Customization

The following Sass variables can be overridden to customize Input/Form components:

VariableDefault Core Theme Value
$text-input__line-height1.3
$text-input__background-color--disabled$color-border
$text-input__border-width2px
$text-input__border-color$color-base
$text-input__border-color--disabled$color-gray-light
$text-input__border-color--error$color-error
$text-input__border-color--error--inverse$color-error-light
$text-input__border-color--inverse$color-black
$text-input__border-color--success$color-green-light
$text-input__color$color-base
$text-input__padding8px
$text-input__border-radius3px

Form components

VariableDefault Core Theme Value
$form-label__color--inverse$color-white
$form__max-width460px
$form__max-width--small6em
$form__max-width--medium12em
$form-hint__color$color-gray
$form-hint__color--inverse$color-muted-inverse
$form-error__color$color-error
$form-error__color--inverse$color-error-light