UNPKG

@wordpress/components

Version:
142 lines (87 loc) 3.91 kB
# TextControl TextControl components let users enter and edit text. ![Unfilled and filled TextControl components](https://make.wordpress.org/design/files/2019/03/TextControl.png) ## Design guidelines ### Usage #### When to use TextControls TextControls are best used for free text entry. If you have a set of predefined options you want users to select from, it’s best to use a more constrained component, such as a SelectControl, RadioControl, CheckboxControl, or RangeControl. Because TextControls are single-line fields, they are not suitable for collecting long responses. For those, use a text area instead. TextControls should: - Stand out and indicate that users can input information. - Have clearly differentiated states (selected/unselected, active/inactive). - Make it easy to understand the requested information and to address any errors. - Have visible labels; placeholder text is not an acceptable replacement for a label as it vanishes when users start typing. ### Anatomy ![Features of a TextControl component with numbered labels](https://make.wordpress.org/design/files/2019/03/TextControl-Anatomy.png) 1. Label 2. Input container 3. Input text #### Label text Label text is used to inform users as to what information is requested for a text field. Every text field should have a label. Label text should be above the input field, and always visible. #### Containers Containers improve the discoverability of text fields by creating contrast between the text field and surrounding content. ![A TextControl with a stroke around the container to clearly indicate the input area](https://make.wordpress.org/design/files/2019/03/TextControl-Do.png) **Do** A stroke around the container clearly indicates that users can input information. ![A TextControl without a clear visual marker to indicate the input area](https://make.wordpress.org/design/files/2019/03/TextControl-Dont.png) **Don’t** Don’t use unclear visual markers to indicate a text field. ## Development guidelines ### Usage Render a user interface to input the name of an additional css class. ```js import { useState } from 'react'; import { TextControl } from '@wordpress/components'; const MyTextControl = () => { const [ className, setClassName ] = useState( '' ); return ( <TextControl __nextHasNoMarginBottom __next40pxDefaultSize label="Additional CSS Class" value={ className } onChange={ ( value ) => setClassName( value ) } /> ); }; ``` ### Props The set of props accepted by the component will be specified below. Props not included in this set will be applied to the input element. #### label If this property is added, a label will be generated using label property as the content. - Type: `String` - Required: No #### hideLabelFromVision If true, the label will only be visible to screen readers. - Type: `Boolean` - Required: No #### help If this property is added, a help text will be generated using help property as the content. - Type: `String` - Required: No #### type Type of the input element to render. Defaults to "text". - Type: `String` - Required: No - Default: "text" #### value The current value of the input. - Type: `String | Number` - Required: Yes #### className The class that will be added with "components-base-control" to the classes of the wrapper div. If no className is passed only components-base-control is used. - Type: `String` - Required: No #### onChange A function that receives the value of the input. - Type: `function` - Required: Yes #### __next40pxDefaultSize Start opting into the larger default height that will become the default size in a future version. - Type: `Boolean` - Required: No - Default: `false` ## Related components - To offer users more constrained options for input, use SelectControl, RadioControl, CheckboxControl, or RangeControl.