JSPM

@material/textfield

0.30.0
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 590423
  • Score
    100M100P100Q188424F
  • License Apache-2.0

The Material Components for the web text field component

Package Exports

  • @material/textfield
  • @material/textfield/constants
  • @material/textfield/constants.js
  • @material/textfield/dist/mdc.textfield
  • @material/textfield/dist/mdc.textfield.css
  • @material/textfield/dist/mdc.textfield.js
  • @material/textfield/foundation
  • @material/textfield/foundation.js
  • @material/textfield/helper-text
  • @material/textfield/helper-text/foundation
  • @material/textfield/helper-text/index
  • @material/textfield/icon
  • @material/textfield/icon/foundation
  • @material/textfield/icon/foundation.js
  • @material/textfield/icon/index
  • @material/textfield/index
  • @material/textfield/index.js
  • @material/textfield/label/foundation
  • @material/textfield/mdc-text-field.scss
  • @material/textfield/outline/foundation

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@material/textfield) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

Text Field

Text fields allow users to input, edit, and select text.

Design & API Documentation

Installation

npm install --save @material/textfield

Usage

HTML Structure

<div class="mdc-text-field">
  <input type="text" id="my-text-field" class="mdc-text-field__input">
  <label class="mdc-text-field__label" for="my-text-field">Hint text</label>
  <div class="mdc-line-ripple"></div>
</div>

HTML5 Validation

MDCTextFieldFoundation provides validity styling by using the :invalid and :required attributes provided by HTML5's form validation API.

<div class="mdc-text-field">
  <input type="password" id="pw" class="mdc-text-field__input" required minlength=8>
  <label for="pw" class="mdc-text-field__label">Password</label>
  <div class="mdc-line-ripple"></div>
</div>

MDCTextFieldFoundation automatically appends an asterisk to the label text if the required attribute is set.

Pre-filled

When dealing with JS-driven text fields that already have values, you'll want to ensure that you render mdc-text-field__label with the mdc-text-field__label--float-above modifier class, and mdc-text-field with the mdc-text-field--upgraded modifier class. This will ensure that the label moves out of the way of the text field's value and prevents a Flash Of Un-styled Content (FOUC).

<div class="mdc-text-field mdc-text-field--upgraded">
  <input type="text" id="pre-filled" class="mdc-text-field__input" value="Pre-filled value">
  <label class="mdc-text-field__label mdc-text-field__label--float-above" for="pre-filled">
    Label in correct place
  </label>
  <div class="mdc-line-ripple"></div>
</div>

Full Width

Full width text fields are useful for in-depth tasks or entering complex information.

<div class="mdc-text-field mdc-text-field--fullwidth">
  <input class="mdc-text-field__input"
         type="text"
         placeholder="Full-Width Text Field"
         aria-label="Full-Width Text Field">
</div>

NOTE: Do not use mdc-text-field--box or mdc-text-field--outlined to style a full width text field.

NOTE: Do not use mdc-text-field__label within mdc-text-field--fullwidth. Labels should not be included as part of the DOM structure of a full width text field.

Textarea

<div class="mdc-text-field mdc-text-field--textarea">
  <textarea id="textarea" class="mdc-text-field__input" rows="8" cols="40"></textarea>
  <label for="textarea" class="mdc-text-field__label">Textarea Label</label>
</div>

Disabled

Add the disabled attribute to <input> if the mdc-text-field is disabled. You also need to add mdc-text-field--disabled to the mdc-text-field.

<div class="mdc-text-field mdc-text-field--disabled">
  <input type="text" id="disabled-text-field" class="mdc-text-field__input" disabled>
  <label class="mdc-text-field__label" for="disabled-text-field">Disabled text field</label>
  <div class="mdc-line-ripple"></div>
</div>

Outlined

<div class="mdc-text-field mdc-text-field--outlined">
  <input type="text" id="tf-outlined" class="mdc-text-field__input">
  <label for="tf-outlined" class="mdc-text-field__label">Your Name</label>
  <div class="mdc-text-field__outline">
    <svg>
      <path class="mdc-text-field__outline-path"/>
    </svg>
  </div>
  <div class="mdc-text-field__idle-outline"></div>
</div>

See here for more information on using the outline sub-component.

NOTE: Do not use mdc-line-ripple inside of mdc-text-field if you plan on using mdc-text-field--outlined. Bottom line should not be included as part of the DOM structure of an outlined text field.

Helper Text

The helper text provides supplemental information and/or validation messages to users. It appears on input field focus and disappears on input field blur by default, or it can be persistent. See here for more information on using helper text.

Leading and Trailing Icons

Leading and trailing icons can be added within the box or outlined variants of MDC Text Field as visual indicators as well as interaction targets. See here for more information on using icons.

CSS Classes

CSS Class Description
mdc-text-field Mandatory
mdc-text-field--upgraded Indicates the text field is upgraded, normally by JavaScript
mdc-text-field--box Styles the text field as a box text field
mdc-text-field--outlined Styles the text field as an outlined text field
mdc-text-field--fullwidth Styles the text field as a full width text field
mdc-text-field--textarea Indicates the text field is a <textarea>
mdc-text-field--disabled Styles the text field as a disabled text field
mdc-text-field--dense Styles the text field as a dense text field
mdc-text-field--with-leading-icon Styles the text field as a text field with a leading icon
mdc-text-field--with-trailing-icon Styles the text field as a text field with a trailing icon
mdc-text-field--focused Styles the text field as a text field in focus

Sass Mixins

To customize the colors of any part of the text-field, use the following mixins. We recommend you apply these mixins within CSS selectors like .foo-text-field:not(.mdc-text-field--focused) to select your unfocused text fields, and .foo-tab.mdc-text-field--focused to select your focused text-fields. To change the invalid state of your text fields, apply these mixins with CSS selectors such as .foo-text-field.mdc-text-field--invalid.

NOTE: the mdc-line-ripple-color mixin should be applied from the not focused class foo-text-field:not(.mdc-tab--focused)).

Mixin Description
mdc-text-field-box-corner-radius($radius) Customizes the border radius for a box text field
mdc-text-field-textarea-corner-radius($radius) Customizes the border radius for a <textarea> text field
mdc-text-field-ink-color($color) Customizes the text entered into the text-field.
mdc-text-field-label-color($color) Customizes the label color of the text-field.
mdc-text-field-line-ripple-color($color) Customizes the color of the default line ripple of the text-field.
mdc-text-field-hover-line-ripple-color($color) Customizes the hover color of the line ripple of the text-field.
mdc-text-field-focused-line-ripple-color($color) Customizes the line-ripple ripple color when the text-field is focused.
mdc-text-field-outline-color($color) Customizes the color of the border of the outlined text-field.
mdc-text-field-hover-outline-color($color) Customizes the hover color of the border of the outlined text-field.
mdc-text-field-focused-outline-color($color) Customizes the outlined border color when the text-field is focused.
mdc-text-field-box-fill-color($color) Customizes the background color of the text-field box.
mdc-text-field-textarea-stroke-color($color) Customizes the color of the border of the textarea.
mdc-text-field-textarea-fill-color($color) Customizes the color of the background of the textarea.
mdc-text-field-fullwidth-line-ripple-color($color) Customizes the line ripple under a fullwidth text field. Doesn't apply to a textarea.
mdc-text-field-icon-color($color) Customizes the color for the leading/trailing icons.
mdc-text-field-helper-text-color($color) Customizes the color of the helper text following a text-field.
mdc-text-field-helper-text-validation-color($color) Customizes the color of the helper text when it's used as a validation message.

MDCTextField

See Importing the JS component for more information on how to import JavaScript.

Property Value Type Description
value String Proxies to the foundation's getValue/setValue methods.
disabled Boolean Proxies to the foundation's isDisabled/setDisabled methods.
valid Boolean Proxies to the foundation's isValid/setValid methods.
required Boolean Proxies to the foundation's isRequired/setRequired methods.
helperTextContent String Proxies to the foundation's setHelperTextContent method when set
ripple MDCRipple The MDCRipple instance for the root element that MDCTextField initializes
Method Signature Description
layout() => void Adjusts the dimensions and positions for all sub-elements
MDCTextField.ripple

MDCRipple instance. When given an mdc-text-field--box root element, this is set to the MDCRipple instance on the root element. When given an mdc-text-field--outlined root element, this is set to the MDCRipple instance on the mdc-text-field__outline element. Otherwise, the field is set to null.

MDCTextFieldAdapter

Method Signature Description
addClass(className: string) => void Adds a class to the root element
removeClass(className: string) => void Removes a class from the root element
hasClass(className: string) => boolean Returns true if the root element contains the given class name
registerTextFieldInteractionHandler(evtType: string, handler: EventListener) => void Registers an event handler on the root element for a given event
deregisterTextFieldInteractionHandler(evtType: string, handler: EventListener) => void Deregisters an event handler on the root element for a given event
registerInputInteractionHandler(evtType: string, handler: EventListener) => void Registers an event listener on the native input element for a given event
deregisterInputInteractionHandler(evtType: string, handler: EventListener) => void Deregisters an event listener on the native input element for a given event
getNativeInput() => {value: string, disabled: boolean, badInput: boolean, checkValidity: () => boolean}? Returns an object representing the native text input element, with a similar API shape
isFocused() => boolean Returns whether the input is focused
isRtl() => boolean Returns whether the direction of the root element is set to RTL

MDCTextFieldAdapter.getNativeInput()

Returns an object representing the native text input element, with a similar API shape. The object returned should include the value, disabled and badInput properties, as well as the checkValidity() function. We never alter the value within our code, however we do update the disabled property, so if you choose to duck-type the return value for this method in your implementation it's important to keep this in mind. Also note that this method can return null, which the foundation will handle gracefully.

MDCTextFieldAdapter.getIdleOutlineStyleValue(propertyName: string)

Returns the idle outline element's computed style value of the given css property propertyName. The vanilla implementation achieves this via getComputedStyle(...).getPropertyValue(propertyName).

MDCTextFieldFoundation

Method Signature Description
getValue() => string Returns the input's value.
setValue(value: string) Sets the input's value.
isValid() => boolean If a custom validity is set, returns that value. Otherwise, returns the result of native validity checks.
setValid(isValid: boolean) Sets custom validity. Once set, native validity checking is ignored.
isDisabled() => boolean Returns whether or not the input is disabled
setDisabled(disabled: boolean) => void Updates the input's disabled state
isRequired() => boolean Returns whether the input is required.
setRequired(isRequired: boolean) Sets whether the input is required.
handleTextFieldInteraction(evt: Event) => void Handles click and keydown events originating from inside the Text Field component
activateFocus() => void Activates the focus state of the Text Field. Normally called in response to the input focus event.
deactivateFocus() => void Deactivates the focus state of the Text Field. Normally called in response to the input blur event.
setHelperTextContent(content: string) => void Sets the content of the helper text
updateOutline() => void Updates the focus outline for outlined text fields

MDCTextFieldFoundation supports multiple optional sub-elements: line ripple, helper text, icon, label, and outline. The foundations of these sub-elements must be passed in as constructor arguments to MDCTextFieldFoundation.