SDAIA

إدخال رمز التحقق

حقل لإدخال رمز التحقق لمرة واحدة بأربعة أو ستة مربعات للأرقام. يقبل لصق الرمز وينقل التركيز تلقائيًا ويمكن أن يعرض إجراء لإعادة الإرسال.

التثبيت

npx sdaia-ui@latest add otp-input

الاستخدام

import { OtpInput } from "@/components/ui/OtpInput"
<OtpInput length={6} label="Verification code" onComplete={verify} />

افتراضي

أربعة مربعات فارغة مع نص مساعد وإجراء إعادة الإرسال.

جارٍ تحميل العرض التوضيحي: otp-input-default

أمثلة

ستة أرقام

الطول 6 للرموز المكوّنة من ستة أرقام. الصق رمزًا لتعبئة كل المربعات.

جارٍ تحميل العرض التوضيحي: otp-input-six-digits

مكتمل

تم إدخال جميع الأرقام.

جارٍ تحميل العرض التوضيحي: otp-input-filled

خطأ

الرمز غير صحيح: تتلون المربعات بالأحمر وتوضح الرسالة ما يجب فعله.

جارٍ تحميل العرض التوضيحي: otp-input-error

معطّل

لا يمكن استخدام المربعات ولا إجراء إعادة الإرسال.

جارٍ تحميل العرض التوضيحي: otp-input-disabled

RTL

تنعكس التسميات وتبقى الأرقام من اليسار إلى اليمين.

جارٍ تحميل العرض التوضيحي: otp-input-rtl

تحقق من هاتفك

يتحقق onComplete من الرمز، وتبدأ إعادة الإرسال فترة انتظار 30 ثانية عبر resendDisabled.

جارٍ تحميل العرض التوضيحي: otp-input-verify

الخصائص

الخاصية

النوع

القيمة الافتراضية

مطلوبة

length

4 | 6

4

اختيارية

value

string

—

اختيارية

defaultValue

string

""

اختيارية

onChange

(value: string) => void

—

اختيارية

onComplete

(value: string) => void

—

اختيارية

label

string

—

اختيارية

helperText

string

—

اختيارية

error

string

—

اختيارية

disabled

boolean

false

اختيارية

resendQuestion

string

—

اختيارية

onResend

() => void

—

اختيارية

resendHref

string

—

اختيارية

resendDisabled

boolean

false

اختيارية

name

string

—

اختيارية

autoFocus

boolean

false

اختيارية

labels

Partial<OtpInputLabels>

—

اختيارية

dir

"ltr" | "rtl"

—

اختيارية

إمكانية الوصول

  • مجموعة واحدة (role="group") تسمّيها التسمية؛ وكل مربع حقل باسم «الرقم 1 من 6» (عبر labels.digit).
  • يفتح inputmode="numeric" لوحة الأرقام، ويسمح autocomplete="one-time-code" على المربع الأول بتعبئة الرمز من الرسالة النصية.
  • الكتابة تنقل إلى المربع التالي، وBackspace يمسح ويعود للخلف، وتنقل الأسهم يسار/يمين وHome وEnd بين المربعات، واللصق يملأ كل المربعات. تُتجاهل الحروف.
  • يضبط الخطأ aria-invalid على كل مربع ويُربط عبر aria-describedby ويُعلَن عنه (role="alert").
  • تبقى الأرقام من اليسار إلى اليمين حتى في العربية، فالسهم الأيسر يعني دائمًا المربع السابق.
  • إعادة الإرسال زر حقيقي (أو رابط عبر resendHref) بمساحة نقر 24 بكسل، ويعطّله resendDisabled أثناء فترة الانتظار.

السلوك المتجاوب

  • كل مربع 48 × 56 بكسل؛ ستة مربعات مع الفواصل تشغل 328 بكسل، وتتسع لهاتف بعرض 360 بكسل مع هوامش 16 بكسل.
  • في الحاويات الأضيق تتقلص المربعات بدلًا من تجاوز العرض، ويلتف سطر إعادة الإرسال.
  • حجم الأرقام يتبع رمز Display xs المتجاوب.