/**
* External dependencies
*/
import { forwardRef } from 'react';
import PropTypes from 'prop-types';
import classnames from 'classnames';
import { useState } from '@wordpress/element';
/**
* Internal dependencies
*/
import Label from '../label';
import './style.scss';
const TextInput = forwardRef(
(
{
className,
id,
type = 'text',
ariaLabel,
ariaDescribedBy,
label,
screenReaderLabel,
disabled,
help,
autoComplete = 'off',
value = '',
onChange,
required = false,
onBlur = () => {},
feedback,
},
ref
) => {
const [ isActive, setIsActive ] = useState( false );
return (
{
onChange( event.target.value );
} }
onFocus={ () => setIsActive( true ) }
onBlur={ () => {
onBlur();
setIsActive( false );
} }
aria-label={ ariaLabel || label }
disabled={ disabled }
aria-describedby={
!! help && ! ariaDescribedBy
? id + '__help'
: ariaDescribedBy
}
required={ required }
/>
{ !! help && (
{ help }
) }
{ feedback }
);
}
);
TextInput.propTypes = {
id: PropTypes.string.isRequired,
onChange: PropTypes.func.isRequired,
value: PropTypes.string,
ariaLabel: PropTypes.string,
ariaDescribedBy: PropTypes.string,
label: PropTypes.string,
screenReaderLabel: PropTypes.string,
disabled: PropTypes.bool,
help: PropTypes.string,
autoComplete: PropTypes.string,
required: PropTypes.bool,
};
export default TextInput;
export { default as ValidatedTextInput } from './validated';