apps/v4/content/docs/components/radix/input-otp.mdx
Input OTP is built on top of input-otp by @guilherme_rodz.
npx shadcn@latest add input-otp
<Step>Install the following dependencies:</Step>
npm install input-otp
<Step>Copy and paste the following code into your project.</Step>
<ComponentSource name="input-otp" title="components/ui/input-otp.tsx" styleName="radix-nova" />
<Step>Update the import paths to match your project setup.</Step>
</Steps> </TabsContent> </CodeTabs>import {
InputOTP,
InputOTPGroup,
InputOTPSeparator,
InputOTPSlot,
} from "@/components/ui/input-otp"
<InputOTP maxLength={6}>
<InputOTPGroup>
<InputOTPSlot index={0} />
<InputOTPSlot index={1} />
<InputOTPSlot index={2} />
</InputOTPGroup>
<InputOTPSeparator />
<InputOTPGroup>
<InputOTPSlot index={3} />
<InputOTPSlot index={4} />
<InputOTPSlot index={5} />
</InputOTPGroup>
</InputOTP>
Use the pattern prop to define a custom pattern for the OTP input.
import { REGEXP_ONLY_DIGITS_AND_CHARS } from "input-otp"
;<InputOTP maxLength={6} pattern={REGEXP_ONLY_DIGITS_AND_CHARS}>
...
</InputOTP>
Use the <InputOTPSeparator /> component to add a separator between input groups.
Use the disabled prop to disable the input.
Use the value and onChange props to control the input value.
Use aria-invalid on the slots to show an error state.
A common pattern for PIN codes. This uses the pattern={REGEXP_ONLY_DIGITS} prop.
Use REGEXP_ONLY_DIGITS_AND_CHARS to accept both letters and numbers.
<ComponentPreview styleName="radix-nova" name="input-otp-form" previewClassName="h-[30rem]" />
To enable RTL support in shadcn/ui, see the RTL configuration guide.
<ComponentPreview styleName="radix-nova" name="input-otp-rtl" direction="rtl" />See the input-otp documentation for more information.