An input password built with and for React and works nicely with Material-UI
You can easily setup your own custom validation rules with regex!
https://codesandbox.io/s/o1v16rqqrz
npm install react-nice-input-password --save
import NiceInputPassword from 'react-nice-input-password';
// If you wanna use the basic css from this library (Optional)
import 'react-nice-input-password/dist/react-nice-input-password.css';
// If you are using NextJs (server side rendering)
import dynamic from "next/dynamic"
const NiceInputPassword = dynamic(() => import('react-nice-input-password'), {ssr: false});React-Nice-Input-Password uses the traditional input[type=password] behinde the cenes.
The strenght configuration can be passed as an array of objects to the prop securityLevels.
You can see a sample of code bellow:
import React from 'react';
import NiceInputPassword from 'react-nice-input-password';
import 'react-nice-input-password/dist/react-nice-input-passord.css';
class App extends React.Component {
state = {}
handleChange = (data) => {
this.setState({
[data.name]: data.value,
});
}
render() {
const { passwordField } = this.state;
const value = passwordField && passwordField.value;
return (
<NiceInputPassword
label="My password field"
name="passwordField"
value={value}
securityLevels={[
{
descriptionLabel: '1 number',
validator: /.*[0-9].*/,
},
{
descriptionLabel: '1 lowercase letter',
validator: /.*[a-z].*/,
},
{
descriptionLabel: '1 uppercase letter',
validator: /.*[A-Z].*/,
},
]}
showSecurityLevelBar
showSecurityLevelDescription
onChange={this.handleChange}
/>
);
}
}import React from 'react';
import NiceInputPassword from 'react-nice-input-password';
import {TextField, InputLabel, Typography} from '@material-ui/core';
import LockIcon from '@material-ui/icons/Lock';
class App extends React.Component {
state = {}
handleChange = (data) => {
this.setState({
[data.name]: data.value,
});
}
render() {
const { passwordField } = this.state;
const value = passwordField && passwordField.value;
return (
<NiceInputPassword
label="My password field"
name="passwordField"
value={value}
showSecurityLevelBar
onChange={this.handleChange}
LabelComponent={InputLabel}
InputComponent={TextField}
InputComponentProps={{
variant: 'outlined',
InputProps: {
endAdornment: <LockIcon />,
}
}}
securityLevels={[
{
descriptionLabel: <Typography>1 number</Typography>,
validator: /.*[0-9].*/,
},
{
descriptionLabel: <Typography>1 lowecase letter</Typography>,
validator: /.*[a-z].*/,
},
{
descriptionLabel: <Typography>1 uppercase letter</Typography>,
validator: /.*[A-Z].*/,
},
]}
/>
);
}
}You can provide a custom className to the Nice Input Password and custom className to the color levels, which will be added to input, description and bullets level elements using dangerClassName, warningClassName and successClassName.
| Property | Type | Default | Description |
|---|---|---|---|
| label | string or function | undefined | The label showned on top of input element |
| name | string | undefined | The name used on input element name={name} |
| visible | boolean | false | Make the password visible by changing the input type to text |
| placeholder | string | (empty string) | The placeholder used on input element placeholder={placeholder} |
| className | string | (empty string) | Optional class to be passed to niceinputpassword context |
| style | object | undefined | Optional style to be passed to input field |
| LabelComponent | ReactComponent | input | Optional label component to be used |
| InputComponent | ReactComponent | input | Optional input component to be used |
| InputComponentProps | Object | null | Optional object to be passed to the custom InputComponent |
| renderLevelBarComponent | Render function | null | Optional function to return a custom levelbar component |
| normalClassName | string | 'none' | The className used on level color |
| dangerClassName | string | 'danger' | The className used on level color |
| warningClassName | string | 'warning' | The className used on level color |
| successClassName | string | 'success' | The className used on level color |
| startAdornment | ReactNode | undefined | Start adornment for this component |
| endAdornment | ReactNode | undefined | End adornment for this component |
| value | string | undefined | The value to be renderized on element |
| showSecurityLevelBar | bool | false | Key to show or not the security level bullets of password |
| showSecurityLevelDescription | bool | false | Key to show or not the security level description securityLevels object |
| securityLevels | array of objects | [] | The array containing the objects to validate the password, see a sample of this object on after this table |
| onChange | func | undefined | onChange handler: @params: { name, value, isValid} |
MIT Licensed. Copyright (c) Renan Borges.

