--- title: Input OTP description: Accessible one-time password component with copy paste functionality. component: true links: doc: https://input-otp.rodz.dev source: shadcn: true inputOtp: true --- ## About Input OTP is built on top of [input-otp](https://github.com/guilhermerodz/input-otp) by [@guilherme_rodz](https://twitter.com/guilherme_rodz). ## Installation CLI Manual Run the following command: ```bash npx shadcn-ui@latest add input-otp ``` Update `tailwind.config.js` Add the following animations to your `tailwind.config.js` file: ```js showLineNumbers title="tailwind.config.js" {6-9,12} /** @type {import('tailwindcss').Config} */ module.exports = { theme: { extend: { keyframes: { 'caret-blink': { '0%,70%,100%': { opacity: '1' }, '20%,50%': { opacity: '0' }, }, }, animation: { 'caret-blink': 'caret-blink 1.25s ease-out infinite', }, }, }, } ``` Install the following dependencies: ```bash npm install input-otp ``` Copy and paste the following code into your project. Update the import paths to match your project setup. Update `tailwind.config.js` Add the following animations to your `tailwind.config.js` file: ```js showLineNumbers title="tailwind.config.js" {6-9,12} /** @type {import('tailwindcss').Config} */ module.exports = { theme: { extend: { keyframes: { 'caret-blink': { '0%,70%,100%': { opacity: '1' }, '20%,50%': { opacity: '0' }, }, }, animation: { 'caret-blink': 'caret-blink 1.25s ease-out infinite', }, }, }, } ``` ## Usage ```tsx import { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot } from '@/components/ui/input-otp' ``` ```tsx ``` ## Examples ### Pattern Use the `pattern` prop to define a custom pattern for the OTP input. ```tsx showLineNumbers {1,7} import { REGEXP_ONLY_DIGITS_AND_CHARS } from "input-otp" ... {/* ... */} ``` ### Separator You can use the `` component to add a separator between the input groups. ```tsx showLineNumbers {4,15} import { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, } from "@/components/ui/input-otp" ... ``` ### Controlled You can use the `value` and `onChange` props to control the input value. ### Form