If true, the pin input receives focus on mount
Pin Input
The PinInput component is similar to the Input component, but is optimized for entering sequences of digits quickly.
Import#
import { PinInput, PinInputField } from '@chakra-ui/react'
- PinInput: The component that provides context to all the pin-input fields.
- PinInputField: The text field that user types in - must be a direct child
of
PinInput.
Usage#
The most common use case of the pin input is for entering OTP or security codes.
Each input collects one character at a time. When a value is entered, focus is moved automatically to the next input, until all fields are filled.
<HStack><PinInput><PinInputField /><PinInputField /><PinInputField /><PinInputField /></PinInput></HStack>
Allowing Alphanumeric values#
By default, the pin input accepts only number values. To add support for
alphanumeric values, pass the type prop and set its value to either
alphanumeric or number.
<HStack><PinInput type='alphanumeric'><PinInputField /><PinInputField /><PinInputField /><PinInputField /></PinInput></HStack>
Using fields as a one time password (OTP)#
Use the otp prop on PinInput to set autocomplete="one-time-code" for all
children PinInputField components.
<HStack><PinInput otp><PinInputField /><PinInputField /><PinInputField /><PinInputField /></PinInput></HStack>
Masking the pin input's value#
When collecting private or sensitive information using the pin input, you might
need to mask the value entered, similar to <input type="password"/>.
Pass the mask prop to PinInput to achieve this.
<HStack><PinInput type='alphanumeric' mask><PinInputField /><PinInputField /><PinInputField /><PinInputField /></PinInput></HStack>
Changing the size of the PinInput#
The PinInput component comes in four sizes. The default is md.
xs(24px)sm(32px)md(40px)lg(48px)
<Stack><HStack><PinInput size='xs'><PinInputField /><PinInputField /><PinInputField /></PinInput></HStack><HStack><PinInput size='sm'><PinInputField /><PinInputField /><PinInputField /></PinInput></HStack><HStack><PinInput size='md'><PinInputField /><PinInputField /><PinInputField /></PinInput></HStack><HStack><PinInput size='lg'><PinInputField /><PinInputField /><PinInputField /></PinInput></HStack></Stack>
Adding a defaultValue#
You can set the defaultValue of the PinInput if you wish:
<HStack><PinInput defaultValue='234'><PinInputField /><PinInputField /><PinInputField /></PinInput></HStack>
Or even a partial defaultValue:
<HStack><PinInput defaultValue='23'><PinInputField /><PinInputField /><PinInputField /></PinInput></HStack>
Changing the placeholder#
To customize the default input placeholder (â—‹), pass the placeholder prop
and set it to your desired placeholder.
<HStack><PinInput placeholder='🥳'><PinInputField /><PinInputField /><PinInputField /></PinInput></HStack>
Disable focus management#
By default, PinInput moves focus automatically to the next input once a field
is filled. It also transfers focus to a previous input when Delete is
pressed with focus on an empty input.
To disable this behavior, set manageFocus to false
<HStack><PinInput manageFocus={false}><PinInputField /><PinInputField /><PinInputField /></PinInput></HStack>
AutoFill and Copy + Paste#
Try copying & pasting 1234 into any of the inputs in the example above.
By default, you can only change one input at a time, but if one of the input
field receives a longer string by pasting into it, PinInput attempts to
validate the string and fill the other inputs.
<HStack><PinInput><PinInputField /><PinInputField /><PinInputField /></PinInput></HStack>
Props#
autoFocus
autoFocusbooleancolorScheme
colorSchemeThe visual color appearance of the component
"whiteAlpha" | "blackAlpha" | "gray" | "red" | "orange" | "yellow" | "green" | "teal" | "blue" | "cyan" | "purple" | "pink" | "linkedin" | "facebook" | "messenger" | "whatsapp" | "twitter" | "telegram"defaultValue
defaultValueThe default value of the pin input
stringerrorBorderColor
errorBorderColorThe border color when the input is invalid. Use color keys in `theme.colors`
stringfocusBorderColor
focusBorderColorThe border color when the input is focused. Use color keys in `theme.colors`
stringid
idThe top-level id string that will be applied to the input fields. The index of the input will be appended to this top-level id.
stringisDisabled
isDisabledIf true, the pin input component is put in the disabled state
booleanisInvalid
isInvalidIf true, the pin input component is put in the invalid state
booleanmanageFocus
manageFocusIf true, focus will move automatically to the next input once filled
booleantruemask
maskIf true, the input's value will be masked just like `type=password`
booleanonChange
onChangeFunction called on input change
(value: string) => voidonComplete
onCompleteFunction called when all inputs have valid values
(value: string) => voidotp
otpIf true, the pin input component signals to its fields that they should
use `autocomplete="one-time-code"`.
booleanplaceholder
placeholderThe placeholder for the pin input
stringsize
sizeThe size of the PinInput
"lg" | "md" | "sm" | "xs"mdtype
typeThe type of values the pin-input should allow
"number" | "alphanumeric"value
valueThe value of the pin input. This is the value that will be returned when the pin input is filled
stringvariant
variantThe variant of the PinInput
"outline" | "flushed" | "filled" | "unstyled"outlinePinInputField#
PinInputField composes Input so you can pass all Input props.
colorScheme
colorSchemeThe visual color appearance of the component
"whiteAlpha" | "blackAlpha" | "gray" | "red" | "orange" | "yellow" | "green" | "teal" | "blue" | "cyan" | "purple" | "pink" | "linkedin" | "facebook" | "messenger" | "whatsapp" | "twitter" | "telegram"errorBorderColor
errorBorderColorThe border color when the input is invalid. Use color keys in `theme.colors`
stringfocusBorderColor
focusBorderColorThe border color when the input is focused. Use color keys in `theme.colors`
stringhtmlSize
htmlSizeThe native HTML size attribute to be passed to the input
numberisDisabled
isDisabledIf true, the form control will be disabled. This has 2 side effects:
- The FormLabel will have `data-disabled` attribute
- The form element (e.g, Input) will be disabled
booleanfalseisInvalid
isInvalidIf true, the form control will be invalid. This has 2 side effects:
- The FormLabel and FormErrorIcon will have `data-invalid` set to true
- The form element (e.g, Input) will have `aria-invalid` set to true
booleanfalseisReadOnly
isReadOnlyIf true, the form control will be readonly
booleanfalseisRequired
isRequiredIf true, the form control will be required. This has 2 side effects:
- The FormLabel will show a required indicator
- The form element (e.g, Input) will have `aria-required` set to true
booleanfalsesize
sizeThe size of the Input
"lg" | "md" | "sm" | "xs"mdvariant
variantThe variant of the Input
"outline" | "filled" | "flushed" | "unstyled"outline