پرتوپرتو

ورودی OTP (InputOTP)

فیلد ورودی کد یکبار مصرف

معرفی

کامپوننت InputOTP برای ورود کدهای یکبار مصرف (OTP) استفاده می‌شود. بر پایه کتابخانه input-otp ساخته شده و از RTL پشتیبانی می‌کند.

چه زمانی استفاده کنیم:

  • برای ورود کدهای تأیید پیامکی یا ایمیلی
  • برای احراز هویت دو مرحله‌ای (2FA)
  • وقتی نیاز به ورود کد عددی کوتاه (۴ تا ۸ رقم) دارید

چه زمانی استفاده نکنیم:

  • برای ورودی‌های غیر عددی — Input-OTP برای کدهای عددی است
  • برای کدهای طولانی‌تر از ۸ رقم — از Input استفاده کنید

زمین بازی

با تغییر تنظیمات زیر، پیش‌نمایش زنده را مشاهده کنید.

زمین بازی
تنظیمات
ظاهر
کد این نمونه به‌صورت خودکار قابل تولید نیست — برای کد آماده‌ی copy/paste به بخش «استفاده» در بالای صفحه مراجعه کنید.

استفاده

import { InputOTP, InputOTPGroup, InputOTPSlot } from '@partodata/ui'

export default function MyComponent() {
  return (
    <InputOTP maxLength={6}>
      <InputOTPGroup>
        <InputOTPSlot index={0} />
        <InputOTPSlot index={1} />
        <InputOTPSlot index={2} />
        <InputOTPSlot index={3} />
        <InputOTPSlot index={4} />
        <InputOTPSlot index={5} />
      </InputOTPGroup>
    </InputOTP>
  )
}

با جداکننده (Separator)

برای تقسیم کد به دو گروه:

import { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator } from '@partodata/ui'
;<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>

کنترل شده

const [value, setValue] = React.useState('')

;<InputOTP maxLength={6} value={value} onChange={setValue}>
  <InputOTPGroup>
    <InputOTPSlot index={0} />
    <InputOTPSlot index={1} />
    <InputOTPSlot index={2} />
    <InputOTPSlot index={3} />
    <InputOTPSlot index={4} />
    <InputOTPSlot index={5} />
  </InputOTPGroup>
</InputOTP>

حالت غیرفعال

<InputOTP maxLength={6} disabled>
  <InputOTPGroup>
    <InputOTPSlot index={0} />
    <InputOTPSlot index={1} />
    <InputOTPSlot index={2} />
    <InputOTPSlot index={3} />
    <InputOTPSlot index={4} />
    <InputOTPSlot index={5} />
  </InputOTPGroup>
</InputOTP>

Props

InputOTP

Prop

Type

InputOTPGroup

گروه‌بندی slot‌ها در کنار هم.

Prop

Type

InputOTPSlot

Prop

Type

InputOTPSeparator

جداکننده بصری بین گروه‌های slot. به‌صورت پیش‌فرض آیکون نقطه (· / Dot) نمایش می‌دهد.

حالت‌ها و انواع

بدون جداکننده

تمام slot ها در یک گروه واحد.

با جداکننده

تقسیم slot ها به دو یا چند گروه با InputOTPSeparator.

حالت کنترل‌شده

با value و onChange مقدار را کنترل کنید.

حالت غیرفعال

با disabled تمام slot ها غیرفعال می‌شوند.

راهنمای استفاده

بکنید

  • از InputOTPSeparator برای تقسیم کدهای طولانی (مثلاً ۶ رقمی) به دو گروه ۳ تایی استفاده کنید - dir="ltr" را برای کدهای عددی حفظ کنید تا ترتیب ورود صحیح باشد - از حالت کنترل‌شده (value + onChange) استفاده کنید تا بتوانید اعتبارسنجی انجام دهید

نکنید

  • از InputOTP برای ورودی‌های طولانی‌تر از ۸ رقم استفاده نکنید — Input مناسب‌تر است - dir="rtl" را برای کدهای عددی تنظیم نکنید — ترتیب ارقام معکوس می‌شود - بدون بازخورد بصری (مانند حالت خطا) از OTP استفاده نکنید

دسترسی‌پذیری

  • ناوبری خودکار بین slot ها با تایپ کاراکتر
  • پشتیبانی از Paste کد یکبار مصرف
  • با disabled کل input غیرفعال می‌شود
  • معناشناسی screen reader توسط input مخفی زیرین (کتابخانه input-otp) فراهم می‌شود، نه به‌صورت جداگانه روی هر slot
  • پشتیبانی از Backspace برای بازگشت به slot قبلی

کامپوننت‌های مرتبط

  • اگر نیاز به ورودی متنی عمومی دارید → Input
  • اگر نیاز به مدیریت فرم با validation دارید → Form