React OTP Input Component
!
npm version
!
bundle size
!
license
!
TypeScript
A lightweight, accessible, and customizable OTP (One-Time Password) input component for React applications. Perfect for authentication flows, 2FA verification, and multi-digit code inputs.
⨠Features
- š¢
Automatic Navigation - Auto-focuses next field on input
- āØļø
Full Keyboard Support - Arrow keys, Backspace, Tab navigation
- āæ
Accessibility Focused - Screen reader friendly
- š±
Mobile Optimized - Large touch targets, numeric keyboard
- šØ
Easy to Style - Customizable CSS classes
- ā”
Zero Dependencies - Lightweight and fast
- ā
Input Validation - Only accepts numeric values
- š
TypeScript Ready - Full type definitions included
š¦ Installation
```bash
npm i custom-simple-otp
š Props
āāāāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāā¬āāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā Prop ā Type ā Required ā Default ā Description ā
āāāāāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāā¼āāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¤
ā length ā number ā No ā 4 ā Number of OTP input fields (1-10) ā
ā onSubmit ā (otp: number) => void ā Yes ā - ā Callback when all fields are filled ā
ā isDisable ā boolean ā No ā false ā Disables all input fields ā
āāāāāāāāāāāāā“āāāāāāāāāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāāā“āāāāāāāāāā“āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
šØ Styling
The component uses CSS classes that you can easily override:
Default CSS Classes
.otp-container {
display: flex;
gap: 10px;
justify-content: center;
}
.otp-input-field {
width: 50px;
height: 50px;
text-align: center;
font-size: 24px;
border: 2px solid #e2e8f0;
border-radius: 8px;
transition: all 0.2s ease;
}
.otp-input-field:focus {
outline: none;
border-color: #4f46e5;
box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.1);
}
.otp-input-field:disabled {
background-color: #f7fafc;
cursor: not-allowed;
}
āØļø Keyboard Navigation
The component supports full keyboard navigation:
Key Action
Arrow Right (ā) Move to next input field
Arrow Left (ā) Move to previous input field
Backspace Clear current field and move to previous
Delete Clear current field
Tab Navigate through fields (standard tab order)
Shift + Tab Navigate backwards
Numbers (0-9) Input digit and auto-advance
Paste Paste digits (fills multiple fields)