پرتوپرتو

ورودی OTP (Input OTP)

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

معرفی

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

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

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

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

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

استفاده

import { InputOTP, InputOTPGroup, InputOTPSlot } from '@parto-system-design/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 '@parto-system-design/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. پیش‌فرض آیکون خط نمایش می‌دهد. محتوای سفارشی به‌عنوان children قابل تنظیم است.

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

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

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

با جداکننده

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

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

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

حالت غیرفعال

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

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

بکنید

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

نکنید

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

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

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

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

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