Skip to content
Redpanda UI
Esc
↑↓navigate↵open⌘Jpreview
Made by guilherme_rodz
Edit on GitHub

Input OTP

Accessible one-time password component with copy-paste functionality.

Installation

bash
npx shadcn@latest add @redpanda/input-otp
bash
pnpm dlx shadcn@latest add @redpanda/input-otp
bash
yarn dlx shadcn@latest add @redpanda/input-otp
bash
bunx shadcn@latest add @redpanda/input-otp
bash
nubx shadcn@latest add @redpanda/input-otp
bash
aube dlx shadcn@latest add @redpanda/input-otp

When to use

Use this decision tree to determine when to use the Input OTP component:

Usage

tsx
import { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot } from '@/components/redpanda-ui/input-otp';
tsx
<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>

Examples

Pattern

Use Base UI’s validationType prop to accept an alphanumeric OTP. The default is numeric.

tsx
<InputOTP maxLength={6} validationType="alphanumeric">  <InputOTPGroup>    <InputOTPSlot index={0} />    {/* ... */}  </InputOTPGroup></InputOTP>

Separator

Use InputOTPSeparator to add a separator between input groups.

tsx
import {  InputOTP,  InputOTPGroup,  InputOTPSeparator,  InputOTPSlot,} from "@/components/redpanda-ui/input-otp"
...
<InputOTP maxLength={4}>  <InputOTPGroup>    <InputOTPSlot index={0} />    <InputOTPSlot index={1} />  </InputOTPGroup>  <InputOTPSeparator />  <InputOTPGroup>    <InputOTPSlot index={2} />    <InputOTPSlot index={3} />  </InputOTPGroup></InputOTP>

Controlled

You can use the value and onChange props to control the input value.

Credits

Recent changes

  • patchv1.2.0Pin shipped dependency floors to the version we develop against. Registry items now declare ranges like `^5.1.9` (the actual installed version) instead of collapsing to `^5.0.0`, so consumers start on the known-tested baseline while caret semantics still allow any compatible release within the same major.#133
  • minorv1.1.0Theme docs refresh, readability pass on semantic foregrounds, and consumer-facing Base UI regression fixes.#121
  • minorv1.0.0Post-Base-UI polish. Public API unchanged.#116
  • majorv1.0.0Migrate every Radix-based primitive to `@base-ui/react@^1.4.0` (Base UI).#114
  • minorv0.3.0Add theme-provider component to the registry with documentation and tests. Includes playground type improvements (export RegistryItem, remove as-const boilerplate) and docs site dark mode border color fix.#109
See full history →

Last updated on

Was this page helpful?