UNPKG

otp-angular

Version:

**Otp Angular** is a lightweight, highly customizable, and dependency-free OTP (One-Time Password) input component built for Angular 20+ applications. It offers seamless integration, flexible configuration, and a polished user experience for OTP or verifi

152 lines (102 loc) โ€ข 7.67 kB
# ๐Ÿ” OTP Angular **Otp Angular** is a lightweight, highly customizable, and dependency-free OTP (One-Time Password) input component built for Angular 20+ applications. It offers seamless integration, flexible configuration, and a polished user experience for OTP or verification inputs. The component now also includes a built-in **resend option**, making it easy to handle OTP resubmission flows directly within the UI. > โœ… Supports Angular 20+ > ๐Ÿ”ง Fully customizable > ๐ŸŽฏ Keyboard navigation support > ๐Ÿงช Easily testable & maintainable > ๐Ÿ’ก Auto-focus, password-style, number-only, and more --- ![OTP Input Demo](https://github.com/adrik-HubGuru/otp-angular/blob/main/otp-angular.gif?raw=true) [Demo](https://stackblitz.com/edit/stackblitz-starters-osu6xqrf?file=package.json) --- ## ๐Ÿ“ฆ Installation ```bash npm install otp-angular ``` --- ## ๐Ÿš€ Latest changes in 1.1.0 - **Update Auto Submit** Improved autoSubmit functionality - **Bug Fix** Fixed form control value update issue on Backspace delete ## Usage For Component ```bash import { OtpAngular, OtpAngularType } from 'otp-angular'; @Component({ imports: [...others, OtpAngular, OtpAngularType] }) export class <ComponentName> { protected config = signal<OtpAngularType>({ length: 4 }); } ``` For Template ```bash @let _config = config(); <!-- With Event Binding --> <otp-angular [config]="_config" (onInputChange)="onInputChange($event)" (onResendAvailable)="resend($event)" /> <!-- Using Reactive FormControl --> <otp-angular [config]="_config" formControlName="otp" /> <!-- Using Forms Module --> <otp-angular [config]="_config" [(ngModel)]="otp" /> ``` --- ## โš™๏ธ Inputs/Outputs | Option | Type | Required | Description | Default | |---------------------|------------|----------|----------------------------------------------------------------------------------|----------------| | `disabled` | `boolean` | No | Disables the OTP input when set to `true` | `false` | | `onInputChange` | `Output` | No | Emits the OTP value on change. Returns `string`, `number`, or `null` | โ€” | | `onAutoSubmit` | `Output` | No | Emits the OTP value when all input fields are filled and `autoSubmit` is enabled | โ€” | | `onResendAvailable` | `Output` | No | Emits `true` when the resend option is clicked | โ€” | | `setValue` | `function` | No | Programmatically sets the OTP value | โ€” | | `reset` | `function` | No | Resets the resend timer | โ€” | | `config` | `object` | Yes | Configuration object for the OTP component (see **Config Options** below) | `{ length: 4 }`| --- ## โš™๏ธ Config Options | Option | Type | Required | Description | Default | |--------------------------|--------------------------|----------|-------------------------------------------------------------------------|---------------------------------| | `length` | `number` | Yes | Number of OTP digits | `4` | | `numbersOnly` | `boolean` | No | Allows only numeric input | `false` | | `autoFocus` | `boolean` | No | Automatically focuses the first input | `false` | | `autoSubmit` | `boolean` | No | Automatically emits the OTP value when all inputs are filled | `false` | | `isPassword` | `boolean` | No | Masks input characters | `false` | | `showError` | `boolean` | No | Shows a red border on empty inputs when blurred | `false` | | `showCaps` | `boolean` | No | Transforms input characters to uppercase | `false` | | `containerClass` | `string \| string[]` | No | Custom CSS class(es) for the container | โ€” | | `containerStyles` | `object` | No | Inline styles for the container | `{}` | | `inputClass` | `string \| string[]` | No | Custom CSS class(es) for OTP input fields | โ€” | | `inputStyles` | `object \| object[]` | No | Inline styles for OTP input fields | `{}` | | `placeholder` | `string` | No | Placeholder text for each input field | `''` | | `separator` | `string` | No | Optional separator character between inputs | `''` | | `resend` | `number` | No | Enables the resend option with countdown (in seconds) | `0` | | `resendLabel` | `string` | No | Text label for the resend option | `RESEND VERIFICATION CODE` | | `resendContainerClass` | `string` | No | Custom CSS class for the resend container | `''` | | `resendLabelClass` | `string` | No | Custom CSS class for the resend label | `''` | | `resendTimerClass` | `string` | No | Custom CSS class for the resend timer | `''` | | `theme` | `'light' \| 'dark'` | No | Theme color mode | `'light'` | --- ## ๐Ÿงฉ Other Features Use @ViewChild to get a reference to the component ```bash @ViewChild(OtpAngular, { static: false }) otpRef!: OtpAngular; ``` ### ๐Ÿ”’ Disabling Inputs You can disable all input fields using the `disabled` input or programmatically: ```bash this.otpRef.disabled.set(true); ``` ### ๐Ÿ” Updating OTP Value ```bash this.otpRef.setValue('1234'); ``` ### ๐Ÿ” Reset the timer of resend ```bash this.otpRef.reset(); ``` --- ๐Ÿ“› Badges ![npm](https://img.shields.io/npm/v/otp-angular) ![npm](https://img.shields.io/npm/dt/otp-angular) ![GitHub issues](https://img.shields.io/github/issues/subha-patra/otp-angular) ![GitHub stars](https://img.shields.io/github/stars/subha-patra/otp-angular) --- ## ๐Ÿ“„ License [![License: MIT](https://raw.githubusercontent.com/subha-patra/otp-angular/ce74d1caa98e055864f1dab0b4dd7be6477589e4/licence.svg)](LICENSE)