Docs
input otp
input otp
Accessible one-time password component with copy paste functionality.
Installation
npx duck-ui@latest add input-otp
npx duck-ui@latest add input-otp
Usage
import {
InputOTP,
InputOTPGroup,
InputOTPSeparator,
InputOTPSlot,
} from "@/components/ui/input-otp"
import {
InputOTP,
InputOTPGroup,
InputOTPSeparator,
InputOTPSlot,
} from "@/components/ui/input-otp"
<InputOTP maxLength={6}>
<InputOTPGroup>
<InputOTPSlot />
<InputOTPSlot />
<InputOTPSlot />
</InputOTPGroup>
<InputOTPSeparator />
<InputOTPGroup>
<InputOTPSlot />
<InputOTPSlot />
<InputOTPSlot />
</InputOTPGroup>
</InputOTP>
<InputOTP maxLength={6}>
<InputOTPGroup>
<InputOTPSlot />
<InputOTPSlot />
<InputOTPSlot />
</InputOTPGroup>
<InputOTPSeparator />
<InputOTPGroup>
<InputOTPSlot />
<InputOTPSlot />
<InputOTPSlot />
</InputOTPGroup>
</InputOTP>
Examples
Pattern
Use the pattern
prop to define a custom pattern for the OTP input.
...
<InputOTP maxLength={6}>
<InputOTPGroup>
<InputOTPSlot />
{/* ... */}
</InputOTPGroup>
</InputOTP>
...
<InputOTP maxLength={6}>
<InputOTPGroup>
<InputOTPSlot />
{/* ... */}
</InputOTPGroup>
</InputOTP>
Separator
You can use the <InputOTPSeparator />
component to add a separator between the input groups.
import {
InputOTP,
InputOTPGroup,
InputOTPSeparator,
InputOTPSlot,
} from "@/components/ui/input-otp"
...
<InputOTP maxLength={4}>
<InputOTPGroup>
<InputOTPSlot />
<InputOTPSlot />
</InputOTPGroup>
<InputOTPSeparator />
<InputOTPGroup>
<InputOTPSlot />
<InputOTPSlot />
</InputOTPGroup>
</InputOTP>
import {
InputOTP,
InputOTPGroup,
InputOTPSeparator,
InputOTPSlot,
} from "@/components/ui/input-otp"
...
<InputOTP maxLength={4}>
<InputOTPGroup>
<InputOTPSlot />
<InputOTPSlot />
</InputOTPGroup>
<InputOTPSeparator />
<InputOTPGroup>
<InputOTPSlot />
<InputOTPSlot />
</InputOTPGroup>
</InputOTP>
Controlled
You can use the value
and onValueChange
props to control the input value.
Enter your one-time password.